为什么我总是要在git pull上手动合并?

时间:2011-07-31 02:03:51

标签: git git-merge

我是git的新用户,无法弄清楚如何解决这个问题。我有一些SVN的经验,并且正在接受SVN的行为。

每当我从远程存储库中提取文件,并且我修改的文件也被远程修改时,它需要合并。我可以理解复杂变化的合并冲突,但我发现合并冲突非常小(例如,不同函数中的一行变化)变化。据我所知,SVN可以自动合并大部分内容,只有在自动合并失败的情况下才会使文件处于冲突状态。

对于git,它似乎每次都在发生,并且强制打开git merge工具。有没有办法自动合并文件?我是否遗漏了一些基本上将存储库置于冲突集中的设置?

2 个答案:

答案 0 :(得分:8)

这是一个常见的原因是不同的行结尾。您是否与其他使用不同操作系统的人共享回购? SVN对行结尾做了一些修改。另一方面,Git默认情况下按字节顺序存储文件。这意味着当Windows用户使用\ r \ n行结尾保存文件并且Linux用户使用\ n换行符保存文件时,每行显示都会更改,如果正在进行任何其他更改,则会导致各处发生冲突。要更改处理行结尾的方式,请使用配置设置“core.autocrlf”。在不同操作系统正在运行的仓库中,我建议将其设置为Linux用户的“输入”和Windows用户的“真实”:

git config [--global] core.autocrlf input

git config [--global] core.autocrlf true

实际上,我说只是全局使用这些设置。他们会为你节省一些心痛。阅读git-config man page上有关core.autocrlf的更多信息,并注意如果您遇到此问题并且使用现有存储库打开autocrlf,您可能会看到一些令人吃惊的行为,但可以解释。

答案 1 :(得分:3)

从手册:

  

https://book.git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

     

git commit -a

     

此时两个分支发生了分歧,并有不同的变化   在每个。要将实验中所做的更改合并到master中,   运行

     

git merge experimental

     

如果更改没有冲突,那么您就完成了。如果有冲突,   标记将保留在显示冲突的有问题的文件中;

     

git diff

     

将显示此信息。编辑完文件以解决冲突后,

     

git commit -a

     

将提交合并的结果。最后,

     

gitk

     

将显示生成的历史记录的精美图形表示。

问:你使用的是什么Git客户端? Git命令行工具?或其他什么?

问:此外,这些文件是Linux还是两个Windows?或者他们来自不同的环境?