我知道这是在改写历史,很糟糕。

但是如何从远程分支永久删除少数提交?


当前回答

有时,修复这个问题最简单的方法是从您知道代码良好的地方创建一个新的分支。然后,您可以不去管错误的分支历史记录,以防稍后需要从中挑选其他提交。这也确保您不会丢失任何提交历史记录。

来自你当地的错误分支:

git log

复制你想要分支所在的提交哈希并退出git日志

git checkout theHashYouJustCopied
git checkout -b your_new_awesome_branch

现在你有了一个你想要的新分支。

如果你还需要从错误的分支中保留一个特定的提交,而它不在你的新分支上,你可以选择你需要的特定提交:

git checkout the_errant_branch
git log

复制你需要拉入好的分支的提交哈希并退出git日志。

git checkout your_new_awesome_branch
git cherry-pick theHashYouJustCopied

拍拍自己的背。

其他回答

TL:博士;

n . git switch -C branch_name origin/branch_name~ Git push—force

完成后,远程分支将被n次提交还原。


解释:

使用git开关,按n次提交重置分支。c选项将强制创建具有相同名称的新分支。 将branch_name替换为分支名称, 将n(在命令的末尾)替换为要恢复的提交数。 命令1:git switch -C branch_name origin/branch_name~n 例如:git switch -C feature/dashboard origin/feature/dashboard~1 //返回dashboard分支的1次提交。 强制推送局部更改 命令#2:git push——force


提示:要撤消已提交(未推送)的更改,git将重置HEAD~

有时,修复这个问题最简单的方法是从您知道代码良好的地方创建一个新的分支。然后,您可以不去管错误的分支历史记录,以防稍后需要从中挑选其他提交。这也确保您不会丢失任何提交历史记录。

来自你当地的错误分支:

git log

复制你想要分支所在的提交哈希并退出git日志

git checkout theHashYouJustCopied
git checkout -b your_new_awesome_branch

现在你有了一个你想要的新分支。

如果你还需要从错误的分支中保留一个特定的提交,而它不在你的新分支上,你可以选择你需要的特定提交:

git checkout the_errant_branch
git log

复制你需要拉入好的分支的提交哈希并退出git日志。

git checkout your_new_awesome_branch
git cherry-pick theHashYouJustCopied

拍拍自己的背。

我喜欢用rebase来做这个。 下面的n是最后的n次提交。如果你想删除第三个,用3替换n。

git rebase -i HEAD~n

然后,在清单中找到所需的提交,并将其从“pick”更改为“drop”。退出rebase并使用git push和“-f”选项,就像你刚刚做了一个rebase一样。

从pctroll的答案简化,类似的基于这篇博客文章。

# look up the commit id in git log or on github, e.g. 42480f3, then do
git checkout master
git checkout your_branch
git revert 42480f3
# a text editor will open, close it with ctrl+x (editor dependent)
git push origin your_branch
# or replace origin with your remote
 git reset --soft commit_id
 git stash save "message"
 git reset --hard commit_id
 git stash apply stash stash@{0}
 git push --force