git merge-file将整个文件标记为不同而不是部分

时间:2019-05-24 14:44:55

标签: git

我正在尝试使用git merge-file在两个分支(currentother)之间进行3种方式的合并,这些分支很早以前就逐个文件了。我之所以选择这种方法,是因为进行git merge会导致太多冲突,并使其成为一场噩梦,而逐个文件地进行操作并不会破坏太多,并且在我进行测试时不会更新所有测试更改会更容易。

然后的想法是使用此脚本,该脚本使用分支名称,文件名并使用当前分支上文件的最新版本,分歧点的版本和最后一次提交的版本执行合并。另一个分支。

问题在于,此命令不是仅突出显示不同的部分,而是简单地说整个文件发散了,即使实际上只有几行不同。我在这里做什么错了?

#!/bin/bash

common_sha=$(git merge-base HEAD $1)

git show $common_sha:$2 > common
git show $1:$2 > theirs

git merge-file --diff3 $2 common theirs

rm common
rm theirs

以下是所使用脚本的示例:

$ git branch -a
* current_branch
  master
  other_branch
$ my_merge.sh other_branch file.txt

这是它使用的文件

common version of file.txt

line 1
line 2
line 3
line 4
line 5

current branch's version of file.txt

line 1
line 2.2
line 3
line 4.1
line 6

other branch's version of file.txt

line 1
line 2.1
line 2.2
line 3
line 4
line 5

预期结果与实际结果

expected result after running the script

line 1
<<<<<<< file.txt
line 2.2
||||||| common
line 2
=======
line 2.1
line 2.2
>>>>>>> theirs
line 3
line 4.1
line 6

actual result

<<<<<<< file.txt
line 1
line 2.2
line 3
line 4.1
line 6
||||||| common
line 1
line 2
line 3
line 4
line 5
=======
line 1
line 2.1
line 2.2
line 3
line 4
line 5
>>>>>>> theirs


1 个答案:

答案 0 :(得分:2)

检查文件:

if(gettingupspeech.equals("5 more minutes Mum""five more minutes Mum")){
      resultText.setText("Correct! Press Next to move on.");
 }else{
      resultText.setText("That sounded off, please try again.");
 }

在文件上使用文件(git show HEAD:a-file > a.txt git show $1:a-file > b.txt # replace $1 for the revision you are playing with git show $( git merge-base HEAD $1 ):a-file > c.txt ,并检查每个文件的值是什么,以查看它们是否都是一种格式(CRLF或LF),或者它们是否在CRLF和LF之间切换...或者您可以打开所有这3个文件都可以在一个体面的文本编辑器上显示出来(unix / windows)。如果它们混杂在一起,那就是为什么您会看到这个问题。