2011-09-19 97 views
1

我已经开始使用git(在github上)并且有一个新手工作流问题。如果描述啰嗦的话,事先道歉,但我想描述我在思考,因为我正在经历这个过程,所以你可以纠正我。我也使用Eclipse EGIT插件,我认识到它永远不会像使用命令行一样好,但只是忍耐着我。git eclipse解决冲突导致重新发布未修改的更改以及

我们的项目建立后,我的合作伙伴拥有一个主回购协议,我是一个私人合作者。每当我推,我直接推回他的回购。一般来说,只要没有冲突,我们可以承诺,拉动和推动。每当有冲突时就会发生问题。这里有一个例子:

  1. 我的合伙人和我开始把我的最新代码拉到我们的 各自的工作回购。没有问题。
  2. 我修改FileA和FileB,添加,提交和推送它们两者。没有问题。
  3. 同时,我的合作伙伴修改FileA,然后尝试拉取我的更新。
  4. 的Eclipse 给了他一个错误:用FILEA CheckOut的冲突
  5. 我们涉足的git bash的土地和在执行混帐拉得到更多有用的信息:

    错误:您的局部变化...书面合并:FileA。请在进行合并之前提交您的更改或存储它们。

  6. 好,够公平的。他承诺改变(FileA),并试图再次拉动(通过Eclipse)。

  7. 他得到一条指示FileA冲突的消息。好,这是预料之中的。他现在继续解决FileA上的冲突,并在FileA上添加一个git以指示它已解决。

  8. 他现在已准备好提交并推送。他预计将推进对FileA的合并更改。但现在,以下是我没有得到的部分。尽管他根本没有修改FileB,但Eclipse确定它是默认提交的一部分,所以他需要手动取消选中它以避免重新发送FileB,从而避免推送FileB(因为没有对其进行更改)。但即使这样做也会导致FileB被推向上游。结果,他不仅最终推出了FileA,而且还推出了FileB。

我想知道我们是否以正确的方式做事,因为我们可能不是,建议表示赞赏。

+0

理解git的一个关键点是,你永远不会推送文件,你只推送提交,每个提交都完全指定每个文件的状态。 [julkiewicz的回答](http://stackoverflow.com/questions/7476796/git-eclipse-resolving-conflicts-results-in-recommitting-non-modified-changes-as-w/7477037#7477037)建议一种方式,你的同事可能包含的内容与您期望提交的内容不同。 –

回答

0

也许在第6点你的colegue做了一个包含全部的改变,直到试图拉取?如果他使用诸如commit -a之类的东西,那可能会发生。它也可能是Eclipse的默认行为,只需将所有文件的所有更改添加到提交。然后,这些变化可能包括这两个文件A和B.

确保只有改变FILEA上犯下,这样的事情应该用:

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

不知道Eclipse允许对这种细粒度的控制哪些改变是和哪些没有提交。