當使用--fixup和--autosquash時,git給了我很大的頭痛。 我想舉兩個例子,一個工作得很好,另一個是一團糟。 (GIT版本2.6.2)git rebase -i -autosquash衝突
工作例如:
首先承諾:
$ git init
$ printf '1\n' > test.file
$ git add test.file
$ git commit -m 'Insert 1 --> first line'
$ cat test.file
1
第二次提交(BUG):
$ printf 'This is\na BUG\n' >> test.file
$ git commit -am 'Added line 2 and 3 with BUG'
$ cat test.file
1
This is
a BUG
三犯:
$ sed -i '2i 2' test.file
$ git commit -am 'Insert 2 --> second line'
$ cat test.file
1
2
This is
a BUG
第四提交(修正):
$ sed -i 's/a BUG/NOT a BUG/' test.file
$ git add test.file
$ git log --oneline
b021696 Insert 2 --> second line
2e18b8d Added line 2 and 3 with BUG
d7b60a1 Insert 1 --> first line
$ git commit --fixup HEAD~
$ cat test.file
1
2
This is
NOT a BUG
衍合:
$ git log --oneline
fe99989 fixup! Added line 2 and 3 with BUG
b021696 Insert 2 --> second line
2e18b8d Added line 2 and 3 with BUG
d7b60a1 Insert 1 --> first line
$ git rebase -i --autosquash HEAD~3
[detached HEAD 6660b0e] Added line 2 and 3 with BUG
Date: Tue Nov 3 13:28:07 2015 +0100
1 file changed, 2 insertions(+)
Successfully rebased and updated refs/heads/master.
頭痛例如:(唯一的區別是BUGGY提交我是個單線)
首先提交:
$ git init
$ printf '1\n' > test.file
$ git add test.file
$ git commit -m 'Insert 1 --> first line'
$ cat test.file
1
二提交(BUG):
$ printf 'This is a BUG\n' >> test.file
$ git commit -am 'Added line 2 with BUG'
$ cat test.file
1
This is a BUG
第三提交:
$ sed -i '2i 2' test.file
$ git commit -am 'Insert 2 --> second line'
$ cat test.file
1
2
This is a BUG
四犯(修正):
$ sed -i 's/a BUG/NOT a BUG/' test.file
$ git add test.file
$ git log --oneline
2b83fe7 Insert 2 --> second line
62cdd05 Added line 2 with BUG
0ee3343 Insert 1 --> first line
$ git commit --fixup HEAD~
$ cat test.file
1
2
This is NOT a BUG
再次基於:
$ git log --oneline
c3d3db7 fixup! Added line 2 with BUG
2b83fe7 Insert 2 --> second line
62cdd05 Added line 2 with BUG
0ee3343 Insert 1 --> first line
$ git rebase -i --autosquash HEAD~3
error: could not apply c3d3db7... fixup! Added line 2 with BUG
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
Could not apply c3d3db78440e48c1bb637f78e0767520db65ea1e... fixup! Added line 2 with BUG
$ git status
interactive rebase in progress; onto 0ee3343
Last commands done (2 commands done):
pick 62cdd05 Added line 2 with BUG
fixup c3d3db7 fixup! Added line 2 with BUG
Next command to do (1 remaining command):
pick 2b83fe7 Insert 2 --> second line
(use "git rebase --edit-todo" to view and edit)
You are currently rebasing branch 'master' on '0ee3343'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: test.file
no changes added to commit (use "git add" and/or "git commit -a")
$ cat test.file
1
<<<<<<< HEAD
This is a BUG
=======
2
This is NOT a BUG
>>>>>>> c3d3db7... fixup! Added line 2 with BUG
爲什麼修正不乾淨的應用?
爲什麼fixup還包含「2」,它不應該在修正引入的修補程序中,而是包含在前一個提交的修補程序中。
是'<<<<<<< HEAD這是一個錯誤,它真的會被兩行分割:'<<<<<<< HEAD'和'This is a BUG'? –
是的。對不起,並感謝您編輯:) – JohnDuhh
好的。我想我知道問題是什麼。讓我看看是否使用不同的合併方法可以解決它。 –