2015-05-16 3 views
17

Wenn ich in der folgenden Situation bin,Wie interaktives Rebase beim ersten (Root-) Commit einer Verzweigung verwenden?

$ git log --oneline 
* abcdef commit #b 
* 123456 commit #a 

Ich weiß, dass ich immer jedoch

$ git reset HEAD~ 
$ git commit --amend 

laufen kann, habe ich versucht

$ git rebase -i HEAD~2 

aber ich habe

laufen
fatal: Needed a single revision 
invalid upstream HEAD~2 

Daher meine Frage: Gibt es eine Möglichkeit, git rebase zu verwenden, um diese beiden Commits zu quetschen oder nicht?

Antwort

23

Sie an der Wurzel rebase wollen verpflichten Ihrer master Zweig. Genauer gesagt, die beiden Commits zu quetschen, müssen Sie

git rebase -i --root 

und dann ersetzen squash für pick in der zweiten Zeile im Puffer des Editors laufen, das erscheint:

pick 123456 a               
squash abcdef b 

ich Sie verweisen zum git-rebase man page, um weitere Informationen über diese Flagge:

--root

Alle von <branch> erreichbaren Commits referenzieren, statt sie mit einem <upstream> zu begrenzen. Auf diese Weise können Sie die Root-Commits für einen Zweig auf rebasen. [...

]

Beispiel eines interaktiven rebase der Wurzel

# Set things up 
$ mkdir testgit 
$ cd testgit 
$ git init 

# Make two commits 
$ touch README 
$ git add README 
$ git commit -m "add README" 
$ printf "foo\n" > README 
$ git commit -am "write 'foo' in README" 

# Inspect the log 
$ git log --oneline --decorate --graph 
* 815b6ca (HEAD -> master) write 'foo' in README 
* 630ede6 add README 

# Rebase (interactively) the root of the current branch: 
# - Substitute 'squash' for 'pick' on the second line; save and quit the editor. 
# - Then write the commit message of the resulting commit; save and quit the editor. 
$ git rebase -i --root 
[detached HEAD c9003cd] add README; write 'foo' in README 
Date: Sat May 16 17:38:43 2015 +0100 
1 file changed, 1 insertion(+) 
create mode 100644 README 
Successfully rebased and updated refs/heads/master. 

# Inspect the log again 
$ git log --oneline --decorate --graph 
* c9003cd (HEAD -> master) add README; write 'foo' in README 
8

Es scheint dieser Parameter helfen können:

--root 

Rebase alle von < Zweig erreichbar verpflichtet >, statt sie mit einem <Upstream> begrenzen. Auf diese Weise können Sie die Stammverzeichnisse auf einer Verzweigung erneut zulassen.

Dies sollte können Sie zerquetschen (Ich denke, man eigentlich fixup will) Ihr zweiter auf den ersten commit:

git rebase --root -i 

Sorgfalt walten lassen, zu verstehen, was die --root Option tut, weil in Ihrem Fall Es erfüllt Ihre Bedürfnisse, kann aber z. B. bei der Verwendung in Zweigen schwierig sein, weil es auf den weitesten Vorfahren in der Geschichte, die erreichbar ist (dh die Wurzel des Baums), neu positioniert wird; so wird rebase --root rebase z auf a-A-B-D-E-X-Y-Z:

master  A-B-C 
       \ 
upstream  D-E 
        \  
current branch  X-Y-Z 
+0

ich meine Antwort zur gleichen Zeit :) – Jubobs

+1

yep eingeben; Ich klickte auf "posten Sie Ihre Antwort" und die Seite neu zu laden brachte beide Antworten zurück :) Aber Sie kamen zweiten hart;) –

Verwandte Themen