584 Stimmen

Git-Zusammenführung ohne automatische Übergabe

Ist es möglich, eine git merge , aber ohne eine Zusage?

"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, die git merge mit dem --no-commit wird immer noch automatisch übertragen. Hier ist, was ich tat:

$> ~/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)

Eine nachträgliche git log zeigt alle Commits aus dem v1.0-Zweig an, die in Master zusammengeführt wurden.

857voto

manojlds Punkte 273771

Beachten Sie die Ausgabe während des Zusammenführens - sie lautet Fast Forward

In solchen Situationen wollen Sie etwas tun:

git merge <name-of-branch> --no-commit --no-ff

Wichtig : Wenn Sie so vorgehen, können Sie keine Änderungen an den Dateien im Staging-Bereich vornehmen, d. h. Sie können keine Dateien entfernen/hinzufügen oder Änderungen an den Dateien vornehmen.

Wenn Sie die Änderungen zusammenführen und dann festschreiben wollen, als ob Sie alle Änderungen manuell eingegeben hätten (im Gegensatz zu einer traditionellen Zusammenführung), müssen Sie Folgendes ausführen rm .git/MERGE_HEAD Danach wird Git vergessen, dass die Zusammenführung stattgefunden hat.

68voto

Samus_ Punkte 2644

Sie missverstehen die Bedeutung der Verschmelzung hier.

El --no-commit verhindert das MERGE COMMIT, und das passiert nur, wenn Sie zwei unterschiedliche Zweigverläufe zusammenführen; in Ihrem Beispiel ist das nicht der Fall, da Git angibt, dass es ein "Fast-forward"-Zusammenführen war, und dann wendet Git nur die bereits auf dem Zweig vorhandenen Commits nacheinander an.

42voto

Adrian Li Punkte 465

Wenn Sie nur alle Änderungen in einem Commit übertragen wollen, als ob Sie sie selbst eingegeben hätten, reicht auch --squash

$ git merge --squash v1.0
$ git commit

35voto

Pellet Punkte 2056

Ich bevorzuge diesen Weg, damit ich mir keine seltenen Parameter merken muss.

git merge branch_name

Es wird dann angezeigt, dass Ihr Zweig um " # " Commits, können Sie nun diese Commits mit folgendem Vorgehen in die Arbeitsänderungen einfügen:

git reset @~#

Wenn es zum Beispiel nach der Zusammenführung 1 Commit weiter ist, verwenden Sie:

git reset @~1

Hinweis: Unter Windows werden Anführungszeichen benötigt. (Als Josh in Kommentaren vermerkt) z.B.:

git reset "@~1"

5voto

Sithu Punkte 4504

Wenn es nur eine Übergabe im Zweig gibt, mache ich normalerweise

git merge branch_name --ff

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X