如何从拉取请求中删除提交
How to remove commits from a pull request
我做了一个拉取请求,但之后我在本地对项目做了一些提交,结果污染了我的拉取请求,我试图删除它但没有任何运气。
我在 Whosebug 上发现了一些类似的问题,但我无法应用其中的内容。
这是我在 GitHub 上的第一个 pull request,所以对我来说这一切是如何工作的有点奇怪。
突出显示的提交是我需要保留并删除所有其他内容的提交。
它成为历史上的第四次提交,因为我做了一些合并的东西。
我的git 日志
有人可以解释一下这是怎么回事以及如何解决这个问题吗?
所以请执行以下操作,
假设您的分支名称是 my_branch,这有额外的提交。
git checkout -b my_branch_with_extra_commits
(以不同的名称保存此分支)
gitk
(打开 git 控制台)
- 查找您要保留的提交。将该提交的 SHA 复制到记事本。
git checkout my_branch
gitk
(这将打开 git 控制台)
- 右键单击要还原到的提交(更改前的状态),然后单击“
reset branch to here
”
- 做一个
git pull --rebase origin branch_name_to _merge_to
git cherry-pick <SHA you copied in step 3. >
现在查看本地分支提交历史并确保一切正常。
你有几种方法可以做到。
会详细说明我们想做什么,怎么做。
这是解决您的问题的最简单方法:
# Checkout the desired branch
git checkout <branch>
# Undo the desired commit
git revert <commit>
# Update the remote with the undo of the code
git push origin <branch>
还原命令将创建一个新的提交,其中 撤消 原始提交。
人们不希望看到错误的提交和还原提交以撤消错误提交的更改。这会污染提交历史。
这是一种删除错误提交而不是通过还原提交撤消更改的简单方法。
git checkout my-pull-request-branch
git rebase -i HEAD~n
// 其中 n
是您要包含在交互式中的最后一次提交的数量
变基.
- 将
pick
替换为 drop
以表示您要丢弃的提交。
- 保存并退出。
git push --force
如果您要删除提交并且不想保留其更改,@ferit 有一个很好的解决方案。
如果您想将该提交添加到当前分支,但作为当前 pr 的一部分没有意义,您可以改为执行以下操作:
- 使用
git rebase -i HEAD~n
- 将要删除的提交交换到底部(最近)的位置
- 保存并退出
- 使用
git reset HEAD^ --soft
取消提交更改并将它们恢复到暂存状态。
- 使用
git push --force
更新远程分支,而无需删除提交。
现在您已经从远程删除了提交,但仍会在本地进行更改。
这对我有帮助:
用现有分支创建一个新分支。我们称现有的 branch_old
和新的 branch_new
.
将branch_new
重置为稳定状态,当您完全没有任何问题提交时。
例如,要将其置于您当地的硕士级别,请执行以下操作:
git重置——硬主
git push —force origin
cherry-pick
从 branch_old
到 branch_new
的提交
git push
我做了一个拉取请求,但之后我在本地对项目做了一些提交,结果污染了我的拉取请求,我试图删除它但没有任何运气。
我在 Whosebug 上发现了一些类似的问题,但我无法应用其中的内容。 这是我在 GitHub 上的第一个 pull request,所以对我来说这一切是如何工作的有点奇怪。
突出显示的提交是我需要保留并删除所有其他内容的提交。 它成为历史上的第四次提交,因为我做了一些合并的东西。
我的git 日志
有人可以解释一下这是怎么回事以及如何解决这个问题吗?
所以请执行以下操作,
假设您的分支名称是 my_branch,这有额外的提交。
git checkout -b my_branch_with_extra_commits
(以不同的名称保存此分支)gitk
(打开 git 控制台)- 查找您要保留的提交。将该提交的 SHA 复制到记事本。
git checkout my_branch
gitk
(这将打开 git 控制台)- 右键单击要还原到的提交(更改前的状态),然后单击“
reset branch to here
” - 做一个
git pull --rebase origin branch_name_to _merge_to
git cherry-pick <SHA you copied in step 3. >
现在查看本地分支提交历史并确保一切正常。
你有几种方法可以做到。
这是解决您的问题的最简单方法:
# Checkout the desired branch
git checkout <branch>
# Undo the desired commit
git revert <commit>
# Update the remote with the undo of the code
git push origin <branch>
还原命令将创建一个新的提交,其中 撤消 原始提交。
人们不希望看到错误的提交和还原提交以撤消错误提交的更改。这会污染提交历史。
这是一种删除错误提交而不是通过还原提交撤消更改的简单方法。
git checkout my-pull-request-branch
git rebase -i HEAD~n
// 其中n
是您要包含在交互式中的最后一次提交的数量 变基.- 将
pick
替换为drop
以表示您要丢弃的提交。 - 保存并退出。
git push --force
如果您要删除提交并且不想保留其更改,@ferit 有一个很好的解决方案。
如果您想将该提交添加到当前分支,但作为当前 pr 的一部分没有意义,您可以改为执行以下操作:
- 使用
git rebase -i HEAD~n
- 将要删除的提交交换到底部(最近)的位置
- 保存并退出
- 使用
git reset HEAD^ --soft
取消提交更改并将它们恢复到暂存状态。 - 使用
git push --force
更新远程分支,而无需删除提交。
现在您已经从远程删除了提交,但仍会在本地进行更改。
这对我有帮助:
用现有分支创建一个新分支。我们称现有的
branch_old
和新的branch_new
.将
branch_new
重置为稳定状态,当您完全没有任何问题提交时。 例如,要将其置于您当地的硕士级别,请执行以下操作:git重置——硬主 git push —force origin
cherry-pick
从branch_old
到branch_new
的提交
git push