自动合并失败后解释git status输出

时间:2019-02-06 16:43:40

标签: git

我有一个名为myapp的git repo,它具有一个develop分支和多个(正在进行中的)功能分支,其中包括我正在使用的一个分支feature/one

我的feature/one分支是大约一个星期前从刚拉过的develop上剪下来的,但是develop从那以后已经更新了好几次。我只是在git merge develop分支上运行了feature/one,发现有些自动合并失败了:

Automatic merge failed; fix conflicts and then commit the result.

所以我运行了git status并看到:

$ git status
On branch feature/one
Your branch is ahead of 'origin/feature/one' by 5 commits.
  (use "git push" to publish your local commits)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Changes to be committed:

  <whole bunch of stuff here I'm omitting for brevity!>

Unmerged paths:
  (use "git add/rm <file>..." as appropriate to mark resolution)

    deleted by us:   src/main/java/com/myapp/Fizz.java
    deleted by us:   src/main/java/com/myapp/Buzz.java
    both modified:   src/test/java/com/myapp/Foobar.java

我对此并不陌生,但我解释是指:

  1. 在我的本地feature/one分支中,我删除了Fizz.javaBuzz.java,但是由于合并时它们仍然存在于develop分支中,因此git添加了他们回来给我。而且,由于我确实希望删除它们,因此需要在feature/one上将它们重新删除;和
  2. 最近对develop所做的更改和我的feature/one都修改了相同的Foobar.java文件,因此我需要手动检查更改并自己解决合并冲突。

我能正确解释此输出吗?如果不正确,git实际告诉我什么?我选择使用git status来查看自动合并失败是正确的还是有更好的方法来查看失败的原因以及可能需要进一步注意的问题?预先感谢!

1 个答案:

答案 0 :(得分:0)

  

在我的本地功能/一个分支中,我删除了Fizz.java和Buzz.java,但是由于在合并它们时它们仍然存在于develop分支中,因此git为我重新添加了它们。

不,它们不仅是存在,实际上是在另一个分支上发生了更改。如果这些文件没有被更改,那么您的删除就不会有冲突(这些文件将在合并结果中被删除,而不会打扰您。)

您可以再次删除它们,但是您需要注意,这样做是在删除其他人的更改。

  

最近要开发的更改和我的功能/一个都修改了相同的Foobar.java文件,因此我需要手动检查更改并自己解决合并冲突。

正确。 Git已使用合并信息更新Foobar.java并提供了冲突标记。例如:

This is a file
that will be
involved in a merge.

<<<<<<< HEAD
This is a change in
"my" branch.
=======
Here's a conflicting
change in the "master"
branch.
>>>>>>> master

You'll need to choose
the best changes and
resolve the conflict.

分支中的信息位于<<<<<<< HEAD=======行之间。 other 分支中的信息在=======>>>>>>> master行之间。选择如何包括这两个更改,保存文件并继续。