如何解决这个git冲突?

时间:2019-08-01 10:39:45

标签: git

我真的很难理解这次合并出了什么问题。我创建了一个功能分支,并重组了项目的某些部分。当我尝试将其合并到master中时,事情变得混乱了,冲突消息使我感到困惑。我在两个分支的相同位置有相同文件

  

“旧版/css/menu.css”

。未合并的冲突路径显示以下消息:

  

由我们添加-“ legacy / css / menu.css”

首先,我不明白为什么“我们增加了”情况可能引起冲突(它没有说“两者都增加了”,所以出了什么问题?)。

当我尝试检出文件的“它们的版本”时,它的第二个内容是: “ legacy / css / menu.css”没有版本。好吧

文件中没有任何冲突标记。

我假设git在两个文件之间看不到任何关系,只是它们具有相同的名称并且恰好位于同一位置(尽管我不知道为什么我不认为我已经搬家了)项目的那部分实际上是“ / legacy /**”。

有人可以给我一些有关这种情况的可能原因的见解吗?以及如何解决这一冲突。我需要“他们的”版本在合并的提交快照中。预先感谢您的时间和精力:)

2 个答案:

答案 0 :(得分:1)

可能导致的原因

也许像下面这样

# init git resposi
mkdir /tmp/demo && cd /tmp/demo
git init
echo "aaaa" > A
git add . && git commit -m "commit"

# move file A to A1 in branch b1
git checkout -b b1
mv A A1
git add . && git commit -m "commit"

# move file A to A2 in branch master
git checkout master
mv A A2
git add . && git commit -m "commit"

# try to merge branch b1 to master
git merge b1

现在,输入git status,您将看到

    both deleted:    A
    added by them:   A1
    added by us:     A2

您应该做什么

您应该通过gitgit add告诉git checkout您想要的代码

如果您想保留A1,可以使用

git add A1
git rm --cached A A2
git merge --continue

git checkout b1 A1
git rm --cached A A2
git merge --continue

更多详细信息

git的角度来看

git开始合并时

他将尝试合并所有能够推断出最终版本的代码。


例如,file X中的source branch

line1
line2
line3
line4
line5

现在branch Abranch B都来自source branch

也许分支图就像波纹管

source branch ---*---*---*--- branch A
                  \
                   \
                    *---*--- branch B

现在,gitbranch A合并branch B


  

案例1

file X仅在一个分支中更改

git可以推断file X的最终版本将被更改为一个

  

案例2

两个分支都编辑file X,但是更改后的行没有冲突

例如,branch Aline1更改为newline1

branch Bline5更改为newline5

在这种情况下,git也知道file X的最终版本是

newline1
line2
line3
line4
newline5
  

案例3

当更改是分支冲突时

这次,git不知道如何合并,它将文件标记为已修改

打开文件时,您将看到类似以下的内容:

line1
line2
<<<<<< some branch name
line3 change in branch A
======
line3 change in branch B
<<<<<< another branch name
line4
line5

这次轮到您了,您应该将文件修改为所需的格式,并告诉git您解决了合并冲突,然后让git执行git merge --continue < / p>


结论

  • 如果git知道如何合并(尚未发现任何冲突),则git只能使用git merge合并两个分支

  • 如果git遇到冲突。因此,完成步骤如下所示

    1. 您致电git merge
    2. git找到冲突,git暂停合并,git标记文件both modified/both deleted/added by us/added by them
    3. 您可以使用任何喜欢的编辑器将文件修改为所需的内容
    4. 您告诉git,您已经解决了冲突。 git add <file name/folder name>
    5. 致电git merge --continue

答案 1 :(得分:0)

您可以下载称为P4Merge的第三方合并工具,该工具可以通过比较本地|本地|基地修改后代码的远程版本。 从以下位置下载P4Merge:https://www.perforce.com/products/helix-core-apps/merge-diff-tool-p4merge

我也建议您使用Git GUI工具,例如-Sourcetree