Git合并冲突解决显示了我没有进行的暂存更改

6
假设以下情况:
1. 我克隆了一个中央git仓库并检出主分支。 2. 我在本地仓库的主分支中进行了一些更改并提交。 3. 其他人在主分支中进行了更改、提交并推送到中央仓库。 4. 我尝试将中央仓库的主分支拉取到我的仓库中。 5. 发生合并冲突。
然后,如果我发出"git status"命令,我会看到许多更改(我认为是其他人在第三步中完成的),这些更改会自动为下一次合并提交进行暂存,而我将在解决冲突后进行该提交。
我的问题是,在解决冲突并提交后,上述被暂存但不是我完成的更改是否会像它们是由我完成的那样进入仓库?

1
这就是为什么在多人开发的情况下,强烈建议使用单独的分支,并且只将合并操作执行到“主分支”上的原因。 - twalberg
2个回答

6
每次进行合并操作时,都会创建一个提交记录(commit)。执行pull命令实际上是一个fetch和merge的操作(除非你使用fast forward模式)。
当合并成功且没有冲突时,你可以看到一个直接的提交记录(前提是不使用fast forward模式)。但是当发生冲突时,Git会将文件保留在冲突状态中。所有其他成功合并的文件将被放置在暂存区(staged area)中。所以当你解决完冲突后,可以一起提交所有文件。
这个提交记录标记为一个合并提交(merge commit),未来读取历史记录的人应该知道这个提交是由合并操作引起的,而不是你自己做的更改。

我在解决冲突后实际上进行了合并提交,然后检查了已暂存的文件,并使用 git blame 命令查看了这些文件。git blame 显示这些自动暂存的更改不是由我完成的! - Lahiru Chandima
那么,这回答了你的问题吗? - Vishwanath
是的。但仍然有些困惑为什么会以那种方式发生。 - Lahiru Chandima
由于您尚未进行这些更改,因此根据Git blame所说,可以正确地说它们不是您的更改。而且,Git允许我们按事件发生的方式跟踪时间线。合并提交仅用于说明这两个分支在此提交中已合并。这里有本地和远程分支。 - Vishwanath

1
这通常是因为您没有在git配置中禁用某些设置。当启用autocrlf选项并拉取内容时,如果行尾不同,则会更改行尾,并修改文件。
autocrlf = false
# or with this
git config --global core.autocrlf true

下一个是文件模式,这里与之前一样。
filemode = false

通常这些就是问题所在。您可以在git配置文件中设置这些选项。
.git/config

但是我看到的已经暂存的更改并不像是行尾更改。如果它们是行尾更改,我会看到两个相似的行,一个带有 - 标记,另一个带有 + 标记(表示删除具有特定行尾的行并添加具有不同行尾的相同行)。我看到的大部分更改都是插入操作。 - Lahiru Chandima
那你的文件模式改变了吗?你能发布你的配置设置吗?但是不要包括你的仓库 :D - René Höhle
我在本地仓库配置中将filemode设置为false。以下是本地仓库的配置信息:[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true hideDotFiles = dotGitOnly [remote "origin"] url = xxxxxxx fetch = +refs/heads/:refs/remotes/origin/ [branch "master"] remote = origin merge = refs/heads/master [gui] wmstate = zoomed geometry = 887x427+2197+-11 799 192 - Lahiru Chandima

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