Git:反向合并后如何提交本地更改

时间:2012-04-27 16:14:06

标签: git merge commit reverse

现状:

两名开发人员正在名为Sprint1的相同远程分支中工作:

开发人员1:更改说2个文件中的一些代码,提交(意外添加3个其他文件),然后推送到Sprint1。

开发人员2:以某种方式意识到开发人员1也偶然添加了我们不想推送的3个文件。因此,在开发人员1更改之前,他将更改反向合并到提交。

此时,开发人员1想要再次尝试提交他的两个文件(而不是他正在处理的额外3个文件)并推送到远程分支(Sprint1)。问题是pull会覆盖Developers 1本地文件,并有效地“删除”所有5个文件中的本地更改。

开发人员1获取最新版本的正确方法是什么,但是这次能够推送正确的文件而不会丢失更改?

2 个答案:

答案 0 :(得分:1)

让开发人员1使用他当前的本地编辑创建另一个分支,然后在他的本地文件上的Sprint1分支上向他的Sprint1分支(而不是他创建的新分支)发出拉取请求。然后,他可以在他不希望在新分支中提交的三个文件上运行git rm,然后将该分支合并回Sprint1。

答案 1 :(得分:1)

关于git的好处是完全删除你曾经提交过的smth很难。如果您不想对存储库执行强制推送以删除这些提交(原始提交和还原它的提交)并从头开始提交更改,那么Developer 1可以执行以下操作:

  1. git pull - 好的,我们提取还原提交并有这样的历史记录:

    ca798ca revert 'commit1'
    cf76cf7 commit1
    

    好吧,我们“失去了”我们的变化,但不要担心 - 下一步将把它们带回来。

  2. git revert -n HEAD(或显式git revert -n ca798ca)还原还原提交。现在,原始提交的所有更改(必要和不必要的更改)都在索引中,但尚未提交(感谢-n选项)。

  3. git reset HEAD将所有更改从索引移回工作目录。

  4. git add necessary_file && git commit -m 'necessary changes'仅向索引添加必要的更改并提交它们。您在此提交中不想要的所有更改都将保留在您的工作目录中。

  5. git push与同事分享您的结果。

  6. 这些步骤是按原样提供的,所以如果您不理解上述内容,请在执行前询问。否则,事情可能会变得更加混乱。