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



现状:

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

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

开发人员

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

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

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

git 的好处是很难完全删除您曾经提交的 smth。如果您不想对存储库执行强制推送以删除这两个提交(原始提交和还原它的提交(并从头开始提交更改,开发人员 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与同事分享您的结果。

这些步骤按原样提供,因此,如果您不了解上述内容,请在执行之前询问。否则,事情可能会变得更加混乱。

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

最新更新