Ist es möglich, ein git merge
, aber ohne Commit zu machen?
"man git merge" sagt dies:
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.
Aber wenn ich versuche, git merge
mit dem zu arbeiten, wird --no-commit
es immer noch automatisch festgeschrieben. Folgendes habe ich getan:
$> ~/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)
Im Folgenden werden git log
alle Commits aus dem Zweig v1.0 angezeigt, die in master zusammengeführt wurden.
--no-commit
Switch nur dann wirksam, wenn kein Konflikt auftritt. Im Falle eines Konflikts wird git niemals automatisch festgeschrieben.rm .git/MERGE_HEAD
, wodurch git gezwungen wird, zu vergessen, dass die Zusammenführung stattgefunden hat.Automatic merge went well; stopped before committing as requested
git merge BRANCHENAME --no-commit --no-ff
ich meinen Arbeitsbereich in einem "MERGING" -Zustand verlassen. Nicht ganz sicher , was das genau das tut, aber eine einfachegit stash save
undgit stash pop
Zyklus schien alles wieder zu normalisieren; mit nur den geänderten Dateien aus dem Zielzweig wie beabsichtigt und nicht mehr mit dem Status MERGING.Sie verstehen die Bedeutung der Zusammenführung hier falsch.
Die
--no-commit
verhindert , dass die MERGE COMMIT auftritt, und das geschieht nur , wenn Sie zwei divergierende Zweig Geschichten verschmelzen; In Ihrem Beispiel ist dies nicht der Fall, da Git angibt, dass es sich um eine "Schnellvorlauf" -Zusammenführung handelt, und Git dann nur die bereits in der Verzweigung vorhandenen Commits nacheinander anwendet.quelle
git help merge
=> "--no-commit
Wenn Sie die Zusammenführung durchführen, aber so tun, als wäre die Zusammenführung fehlgeschlagen, und keine automatische Festschreibung vornehmen, um dem Benutzer die Möglichkeit zu geben, das Zusammenführungsergebnis vor dem Festschreiben zu überprüfen und weiter zu optimieren. "" Der Schlüssel ist natürlich, es in Verbindung mit--no-ff
Wenn Sie nur alle Änderungen in einem Commit festschreiben möchten, als hätten Sie sich selbst eingegeben, reicht --squash ebenfalls aus
quelle
git merge v1.0 --no-commit --no-ff
Ich bevorzuge diesen Weg, damit ich mich an keine seltenen Parameter erinnern muss.
Es wird dann angezeigt, dass Ihre Niederlassung durch "
#
" Commits voraus ist. Sie können diese Commits jetzt entfernen und sie wie folgt in die Arbeitsänderungen einfügen:Wenn zum Beispiel nach dem Zusammenführen 1 Commit voraus ist, verwenden Sie:
Hinweis: Unter Windows sind Anführungszeichen erforderlich. (Wie Josh in den Kommentaren bemerkt hat) zB:
quelle
git reset "@~1"
Wenn es nur in der Filiale ein Commit gibt, mache ich das normalerweise
quelle