为什么我每次 git pull 都需要手动合并?

5

我是git的新用户,无法解决这个问题。我以前使用过SVN并且按照SVN操作方式进行操作。

每当我从远程仓库拉取文件时,如果我修改的文件也被远程修改,就需要合并。我可以理解复杂更改的合并冲突,但我发现非常小的更改(例如不同函数中的一行更改)也会导致合并冲突。据我所记,SVN可以自动合并大部分内容,只有在自动合并失败时才会将文件置于冲突状态。

对于git而言,似乎每次都会出现这种情况,并强制打开git合并工具。是否有任何方法可以自动合并文件?我是否错过了某些设置,基本上将存储库设置为默认冲突集?


还在吗?您可以评论答案以表示它们是否适用,并回答包含的问题。如果一个答案解决了您的问题,请通过点击勾选标记图标来接受它。 - Paŭlo Ebermann
2个回答

8

造成这种情况的常见原因是不同的行结尾符。您是否与使用不同操作系统的其他人共享存储库? SVN 对行结尾符进行了一些修改。另一方面,Git 默认按字节存储文件,完全按照它们的样子存储。这意味着当 Windows 用户使用 \r\n 行结尾符保存文件,而 Linux 用户使用 \n 行结尾符保存文件时,每一行都会发生变化,如果有其他更改在起作用,则会在各处引起冲突。要更改处理行结尾符的方式,请使用配置设置“core.autocrlf”。在涉及不同操作系统的存储库中,我建议将其设置为“input”(Linux 用户)和“true”(Windows 用户):

git config [--global] core.autocrlf input

或者

git config [--global] core.autocrlf true

实际上,我建议你始终全局使用这些设置。它们会为你省去一些麻烦。关于core.autocrlf的更多信息,请阅读git-config手册页,请注意,如果你正在遭受此问题并且在现有存储库中打开autocrlf,则可能会看到一些惊人的行为,但是可以解释。


3
从手册中:

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

git commit -a

此时,这两个分支已经分叉,各自进行了不同的更改。

要将实验中所做的更改合并到主分支中,请运行

git merge experimental

如果更改没有冲突,则处理完毕。如果有冲突,则在问题文件中留下标记显示冲突。

git diff

将显示此内容。当你编辑文件以解决冲突时,

git commit -a

将提交合并结果。最后,

gitk

将显示一个漂亮的图形表示结果历史。

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

问:此外,所涉及的文件是Linux还是Windows? 还是它们来自不同的环境?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接