我克隆了一个回购,然后,几个小时后,我做了'git pull'.但是出现了合并冲突,我不明白为什么,因为我没有对克隆回购进行任何改动.
git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
git pull
remote: Counting objects: 6211, done.
remote: Compressing objects: 100% (849/849), done.
remote: Total 3237 (delta 2756), reused 2846 (delta 2371)
Receiving objects: 100% (3237/3237), 865.51 KiB | 152.00 KiB/s, done.
Resolving deltas: 100% (2756/2756), completed with 867 local objects.
From git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next
+ 76c2c6d...4d046e9 master -> origin/master (forced update)
+ 1e13928...003e6ba akpm -> origin/akpm (forced update)
+ 9d1d11d...8bcfe39 akpm-base -> …Run Code Online (Sandbox Code Playgroud) 有些人喜欢git merge --squash的原因如下:
压缩到单个提交让您有机会清理杂乱的 WIP 提交,并为您正在合并的更改提供一个很好的理由。
https://coderwall.com/p/qkrmjq/git-merge-squash
但是,我认为有一些缺点超出了制作干净历史的优点。
git merge --squash产生一个非合并提交。因此,Git 不会将您正在合并的提交识别为合并基础。当 1) 在分支 X 上将 A 更改为 B,2)git merge --squash从分支 X 到分支 Y,以及 3) 在分支 X 上将 B 更改为 A(还原),以及 4) 将 X 合并到 Y
时,这会导致不需要的合并结果。
在第 4 步之后,在分支 Y 上,从 A 到 B 的更改不会恢复。这里,这是 3 路合并,因此比较从分支 X 到合并基的差异和从分支 Y 到合并基的另一个差异。前者包括没有变化,后者包括从A到B的变化,所以合并结果包括从A到B的变化。
提交作者被覆盖,这会丢弃贡献。git merge --squash产生一个名为 who did 的新提交git merge --squash。当然,提交内容来自原始提交。这听起来像是在窃取贡献。这成为https://github.com/Microsoft/winfile/pull/42#issuecomment-380681627 中的一个问题
什么是正确的用例git merge --squash?
我在http://github.com/ohcibi/prezto有一个 zprezto 的分支
重现我的问题:
git clone http://github.com/ohcibi/preztocd preztogit checkout ohcibi(我有一个分支叫这个名字,这里没有错别字!)git merge master提交日志显示,ohcibi自 4 月 26 日左右上次合并提交以来,只有 3 个提交是新的。所有 3 次提交都不会触及任何冲突的文件(除了一个预计会发生冲突的文件)。
但为什么该合并与其他文件甚至还有冲突呢.gitmodules?
注意:我不需要帮助解决合并冲突!我知道如何做到这一点,并且我故意没有将“添加”git-merge-conflict-resolution-tag到该问题,因为这将是一个错误的标签(所以它没有丢失,不要添加它!)。我想知道为什么这些冲突首先发生(假设冲突文件在两个分支中都没有更改,据我所知,这是合并冲突的常见原因)。