到达某个提交并丢弃在它之前完成的所有提交
reach to certain commit and discard all the commits that were done ahead of it
我已经将主分支合并到我的功能分支中。然而,提交并不顺利。它搞砸了应该来自主人的变化。功能分支提前 45 次提交,这些是其中最新的 4 次提前提交:
现在我需要伸手去提交 a3aec79。并丢弃在此特定提交之后完成的所有提交。
为了安全起见,您可以先去较新的分行结帐。
git checkout -b bug_fix
您可以获取要切换到的提交 ID 并使用:
git revert <commit_id>
据我所知,你只需要做一个 git reset a3aec79
。如果要放弃工作副本更改,请使用 --hard
标志。
如果您已经提前提交,则必须使用 git push --force
。在那种情况下最好恢复而不是重置。
如果您想撤消该合并提交并将您的功能分支设置回 master 合并之前的确切状态,那么您可以这样做:
git checkout feature
git reset --hard HEAD^
这假定在您进行合并后功能分支中没有执行任何其他操作。
HEAD^
是 git cli 中的 shorthand 表示法,意思是 "the previous commit"。在您的情况下,功能分支指向特定的提交。由于我们知道提交是合并提交(将 master 合并到功能分支),因此我们知道该合并提交的第一个父级将是功能分支的先前状态。 git reset
命令将获取您当前的分支,并强制它指向不同的提交。因此,我们将这两个事实都用于 运行 上述命令和中提琴!你的生意回来了。
这就是我最终解决这个问题的方式。
第 1 步: 使用重置硬命令以及要遍历到的提交的 sha。
git reset --hard <SHAsum of your commit>
在我的例子中是 git reset --hard a3aec79c1f47f6d8df95f61236fc212556b5c224
。
如果你检查状态,你会发现你的分支落后于已经推送的提交。此时不要拉取更改。
第 2 步: 使用
从当前版本创建一个新分支
git checkout -b new_branch_name
在新创建的分支上为 feature/issues 工作。
我已经将主分支合并到我的功能分支中。然而,提交并不顺利。它搞砸了应该来自主人的变化。功能分支提前 45 次提交,这些是其中最新的 4 次提前提交:
现在我需要伸手去提交 a3aec79。并丢弃在此特定提交之后完成的所有提交。
为了安全起见,您可以先去较新的分行结帐。
git checkout -b bug_fix
您可以获取要切换到的提交 ID 并使用:
git revert <commit_id>
据我所知,你只需要做一个 git reset a3aec79
。如果要放弃工作副本更改,请使用 --hard
标志。
如果您已经提前提交,则必须使用 git push --force
。在那种情况下最好恢复而不是重置。
如果您想撤消该合并提交并将您的功能分支设置回 master 合并之前的确切状态,那么您可以这样做:
git checkout feature
git reset --hard HEAD^
这假定在您进行合并后功能分支中没有执行任何其他操作。
HEAD^
是 git cli 中的 shorthand 表示法,意思是 "the previous commit"。在您的情况下,功能分支指向特定的提交。由于我们知道提交是合并提交(将 master 合并到功能分支),因此我们知道该合并提交的第一个父级将是功能分支的先前状态。 git reset
命令将获取您当前的分支,并强制它指向不同的提交。因此,我们将这两个事实都用于 运行 上述命令和中提琴!你的生意回来了。
这就是我最终解决这个问题的方式。
第 1 步: 使用重置硬命令以及要遍历到的提交的 sha。
git reset --hard <SHAsum of your commit>
在我的例子中是 git reset --hard a3aec79c1f47f6d8df95f61236fc212556b5c224
。
如果你检查状态,你会发现你的分支落后于已经推送的提交。此时不要拉取更改。
第 2 步: 使用
从当前版本创建一个新分支git checkout -b new_branch_name
在新创建的分支上为 feature/issues 工作。