解决冲突的Git eclipse也会导致重新提交未修改的更改



我已经开始使用git(在github上),并有一个新手工作流问题。如果描述是冗长的事先道歉,但我想描述我的想法,因为我正在经历的过程,所以你可以纠正我。我也在使用Eclipse EGIT插件,我意识到它永远不会像使用命令行那样好,但请原谅我。

我们的项目是这样设置的,我的合作伙伴拥有一个主回购,我是一个私人合作者。只要我推,我就直接推到他的仓库。一般来说,只要没有冲突,我们对承诺、拉动和推动都是没问题的。只要有冲突,问题就会出现。下面是一个例子:

  1. 我的伙伴和我开始把最新的代码拉到我们的各自的工作库。没有问题。
  2. 我修改FileA和FileB,添加,提交和推送它们。没有问题。
  3. 同时,我的伙伴修改FileA,然后尝试拉取我的更新。
  4. Eclipse 给了他一个错误: CheckOut conflict with FileA
  5. 我们冒险进入git bash领域,在执行git pull时得到一个更有用的消息:

    错误:Your local changes…由merge: FileA编写。

  6. 好的,很公平。他提交了他的更改(FileA),并尝试再次拉(通过Eclipse)。

  7. 他得到一条提示FileA冲突的消息。很好,这是意料之中的。他现在着手解决FileA上的冲突,并在FileA上执行git add以表明冲突已经解决。

  8. 他现在已经准备好承诺和推动了。他希望他对FileA的合并变更能够被推进。但现在,下面是我不明白的部分。即使他根本没有修改FileB, Eclipse在默认情况下将其确定为提交的一部分,因此他需要手动取消选中它以避免重新提交FileB,从而避免推送FileB(因为没有对其进行任何更改)。但即使这样做也会导致FileB被推到上游。结果,他不仅最终推了FileA,而且还推了FileB.

我想知道我们做事情的方式是否正确,既然我们可能不是,谢谢你的建议。

可能在第6点。你的同事做了一个包含所有他所做的更改的提交,直到尝试拉出?如果他经常使用像commit -a这样的东西,可能会发生这种情况。Eclipse的默认行为也可能是将对所有文件的所有更改添加到提交中。这些更改可能包括文件A和文件b。

要确保只提交对FileA的更改,应该使用如下内容:

git add FileA
git commit         # Notice, no '-a' option

不确定Eclipse是否允许这种细粒度的控制,来控制哪些更改可以提交,哪些没有提交。

最新更新