2

现在的情况:

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

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

开发人员 2:不知何故,开发人员 1 还意外添加了 3 个我们不想推送的文件。因此,他在开发人员 1 的更改之前将更改反向合并回提交。

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

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

4

2 回答 2

1

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

于 2012-04-27T16:29:02.257 回答
1

git 的好处是,你一旦提交就很难完全删除。如果您不想强制推送到存储库以删除这两个提交(原始提交和恢复提交的提交)并从头开始提交您的更改,那么 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与同事分享您的结果。

这些步骤是按原样提供的,所以如果您对上述内容有不明白的地方,请在执行之前询问。否则,事情可能会变得更加混乱。

于 2012-04-27T16:38:28.387 回答