非常奇怪的 git 变基行为

Very stange git rebase behavior

我不是 Git 专家,但我无法理解 git rebase 在我的案例中的奇怪行为:
1. 使用 git init
创建一个本地空 git 存储库 2. 创建一个简单的文本文件file.txt,内容如下:

111
222
333

3。使用 git add file.txt 添加 file.txt 到索引并使用 git commit
提交更改 4. 使用 git checkout -b feature
切换到新分支 5. 更改 file.txt 现在它具有以下内容:

111
333

6。使用 git add file.txt 添加 file.txt 到索引并使用 git commit
提交更改 7. 更改 file.txt 现在它具有以下内容:

111
444
333

8。使用 git add file.txt 添加 file.txt 到索引并使用 git commit
提交更改 9. 使用 git checkout master 切换到 master 分支;现在 file.txt 具有以下内容:

111
222
333

10。更改 file.txt 现在它具有以下内容:

111
777
222
333

11。使用 git add file.txt 添加 file.txt 到索引并使用 git commit
提交更改 12. 更改 file.txt 现在它具有以下内容:

111
777
222
888
333

13。使用 git add file.txt 添加 file.txt 到索引并使用 git commit
提交更改 14. 使用 git 结帐功能切换到功能分支;现在 file.txt 具有以下内容:

111
444
333

15。使用 git rebase masterfeature 分支变基到 master 分支;现在我在 file.txt 中发生冲突,该文件具有以下内容:

111
<<<<<<< HEAD
777
222
888
=======
>>>>>>> 2
333

而不是预期的:

111
<<<<<<< HEAD
777
222
888
=======
444
>>>>>>> 2
333

所以我的问题是:为什么文本 444file.txt 中消失了?可以吗?

当您执行 git rebase master:

时会发生这种情况
  1. 工作树重置为master
  2. 当前分支中fork点之后的commit逐一应用

您的示例中的冲突发生在分叉点之后 feature 中的第一个提交上。这是您删除带有 222.

行的提交

So my question is: why did the text 444 disappear from the file.txt? Is it ok?

它并没有消失。 它还没有出现。解决这个冲突后rebase --continue,它会在下一次提交中出现。