Czy można to zrobić git merge
, ale bez zatwierdzenia?
„man git merge” mówi to:
With --no-commit perform the merge but pretend the merge failed and do not autocommit,
to give the user a chance to inspect and further tweak the merge result before
committing.
Ale kiedy próbuję używać git merge
z tym --no-commit
, nadal automatycznie zatwierdza. Oto co zrobiłem:
$> ~/git/testrepo$ git checkout master
Switched to branch 'master'
$> ~/git/testrepo$ git branch
* master
v1.0
$> ~/git/testrepo$ git merge --no-commit v1.0
Updating c0c9fd2..18fa02c
Fast-forward
file1 | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$> ~/git/testrepo$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Kolejne git log
ujawnia wszystkie zatwierdzenia z gałęzi v1.0 połączone w master.
--no-commit
przełącznik działa tylko wtedy, gdy nie występuje konflikt, w przypadku konfliktu git nigdy nie zatwierdza automatycznie.rm .git/MERGE_HEAD
później, co zmusi Gita do zapomnienia o fuzji.Automatic merge went well; stopped before committing as requested
git merge BRANCHENAME --no-commit --no-ff
opuściłem mój obszar roboczy w stanie „ŁĄCZENIA”. Nie całkiem pewien, co to jest dokładnie, ale prostygit stash save
igit stash pop
cykl wydawało się wrócić wszystko do normy; z tylko zmodyfikowanymi plikami z gałęzi docelowej zgodnie z przeznaczeniem, i nie ma już statusu POŁĄCZENIA.Nie rozumiesz tutaj znaczenia połączenia.
W
--no-commit
zapobiega scalającej występuje, i że tylko się dzieje, gdy połączyć dwie historie rozbieżne oddział; w twoim przykładzie tak nie jest, ponieważ Git wskazuje, że było to scalenie „do przodu”, a następnie Git stosuje sekwencyjnie tylko zatwierdzenia już obecne w gałęzi.źródło
git help merge
=> "--no-commit
Wykonaj scalanie, ale udawaj, że scalanie nie powiodło się i nie zatwierdzaj automatycznie, aby dać użytkownikowi szansę na sprawdzenie i dalsze dostosowanie wyniku scalania przed zatwierdzeniem. „ Kluczem jest oczywiście użycie go w połączeniu z--no-ff
Jeśli chcesz zatwierdzić tylko wszystkie zmiany w jednym zatwierdzeniu, tak jakbyś wpisał się sam, zrobi to również --squash
źródło
git merge v1.0 --no-commit --no-ff
Wolę w ten sposób, więc nie muszę pamiętać żadnych rzadkich parametrów.
Następnie powie, że twoja gałąź wyprzedza
#
zatwierdzenia, możesz je teraz usunąć i wprowadzić w działające zmiany, wykonując następujące czynności:Na przykład, jeśli po scaleniu jest 1 zatwierdzenie do przodu, użyj:
Uwaga: w systemie Windows potrzebne są cytaty. (Jak zauważył Josh w komentarzach) np .:
źródło
git reset "@~1"
Kiedy jest tylko jedno zatwierdzenie w oddziale, zwykle robię
źródło