如何使用git取消提交更改

4

我正在使用Git Flow,但不小心将代码提交到了错误的分支(feature),然后发布了它。

我需要将那段代码从分支1中移除,并将其移动到正确的分支,即分支2。

所有文件都存储在一个文件夹中,这可能会使事情变得更加容易,但我不确定该如何操作。

例如:

Branch 1 { 
  Commit That contains {
     ./path/to/files_that_should_be_here
     ./path/to/files_that_need_to_be_in_branch_2
  }
}

Branch 2 {
   No Commits.
}
3个回答

6

如果您没有发布您的更改,最简单的方法是在branch1中撤销最后一次提交(注意:这将完全清除最后一次提交所引入的任何内容):

git checkout branch1
git reset --hard HEAD~

然后切换到正确的分支并在该分支上提交更改。

如果您已经发布了更改,您仍然可以撤销最后一次提交,但是这样您将不得不使用git push --force命令,而您可能没有权限这样做,即使您有权限,也可能会给此存储库的其他用户带来很多麻烦。

相反,您应该简单地还原错误的更改:

git revert <bad_commit>

请将其在正确的分支上重新执行。


它已经发布了,你有什么建议? - Daniel Noel-Davies
1
如果你是唯一的用户或其他用户很少,而且自从你提交以来没有人做过任何事情,并且你有权限使用 git push --force,那么可以撤销上一个提交并强制推送。否则,你只能使用 git revert 或另一个撤销你错误提交影响的提交。 - mvp
1
如有疑虑,请勿使用--force。使用git revert并快乐吧。删除提交(或总体上覆盖历史记录)的唯一理由是错误提交包含不应存在的敏感信息或巨大文件。 - mvp
小心使用 revert 命令。该命令会创建一个提交,以撤销另一个提交的更改,就像您手动删除了一些文件或内容一样。根据分支合并到主分支的顺序,以及在被撤销的文件中是否有进一步的更改,您可能会在主分支中得到被否定的内容:也就是没有移动到第二个分支的文件和内容。 - Maic López Sáenz

2

将提交移动到正确的分支,请使用以下命令

git cherry-pick commithash

在您想要移动提交的分支中执行提交。

如果要从该分支中删除提交,请使用

git reset --hard HEAD~1

2
这并没有解决问题,因为重置只发生在本地存储库上。提交和推送的文件仍然在分支一个远程存储库中。 - Maic López Sáenz
你可以使用 git push origin branchname 命令将更改推送到远程分支。 - amitchhajer

0

git reset --soft HEAD^ 保留你工作目录中的修改。

git reset --hard HEAD^ 取消提交你所做的所有更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接