达到某个提交并丢弃之前完成的所有提交

时间:2015-03-02 16:37:04

标签: git github

我已将主分支合并到我的功能分支中。但是,提交并不顺利。它搞砸了假设来自大师的变化。 feature branch是提前45次提交,这是最新的4次提交:

enter image description here

现在我需要达成承诺a3aec79。并丢弃在此特定提交后完成的所有提交。

4 个答案:

答案 0 :(得分:2)

据我所知,你只需要git reset a3aec79。如果要放弃工作副本更改,请使用--hard标志。

如果您已经提前提交了提交,则必须使用git push --force。在这种情况下,最好还原而不是重置。

答案 1 :(得分:1)

为了安全起见,您可以查看更新的分支。

git checkout -b bug_fix

您可以获取要切换到的提交ID并使用:

git revert <commit_id>

答案 2 :(得分:1)

如果要撤消该合并提交并将功能分支设置回到master合并到它之前的确切状态,那么您可以执行此操作:

git checkout feature
git reset --hard HEAD^

这假定自从您进行合并以来,功能分支中没有其他功能完成。

HEAD^ git cli中的简写符号表示&#34;之前的提交&#34;。在您的情况下,功能分支指向特定的提交。由于我们知道提交是一个合并提交(将master合并到功能分支中),因此我们知道该合并提交的第一个父级将是功能分支的先前状态。 git reset命令将获取当前分支,并强制它指向另一个提交。因此,我们通过运行上述命令和中提琴来使用这两个事实!你的事业。

答案 3 :(得分:0)

这就是我最终解决这个问题的方法。

步骤1:使用reset hard命令以及要遍历的提交的sha。

git reset --hard <SHAsum of your commit>

在我的案例中,git reset --hard a3aec79c1f47f6d8df95f61236fc212556b5c224。 如果检查状态,您将在已推送的提交后面找到您的分支。此刻不要拉动变化。

第2步:使用

从当前版本创建新分支
git checkout -b new_branch_name

处理新创建的分支上的功能/问题。