删除已推送的提交但保留本地更改

8

我在一个分支上推送了一个提交(不是主仓库分支)。它是我最后一次做的提交。我想从仓库中删除它。在推送之后,我已经在本地进行了一些更改(在同一分支下)。
我想在本地保留所有更改。
我应该执行 git revert <commit>,然后执行 git add . -> git commit -> git push origin my-branch 吗?


1
为什么要删除提交记录?如果您已经在本地解决了问题,只需将其检入即可。 - karthick
@karthick,那个提交在我的代码中有错误。 - user9250371
1
你总是可以修复它并将其作为新的提交进行检查。但如果你固执地想要还原提交,那么你所写的步骤是正确的。 - karthick
可能是如何在git中将文件添加到最后一次提交中?的重复问题。 - Vinay Prajapati
@DoIGetAnything 你得到答案了吗? - Vinay Prajapati
3个回答

5
如果我理解得不对,请指出来。这是我的理解:
1. 你进行了一些更改,并使用“git commit”在本地提交了更改。 2. 你用“git push”将更改推送到远程存储库(Github?)。 3. 现在,你意识到刚才推送的更改有问题,想要纠正它。你已经在本地做了这些更改,但还没有提交。
如果没错,从这一点开始,你有两个选择:
1. 简单地创建一个新提交并将其推送上去。这是最简单的选择,但它确实会在git历史记录中留下错误。要做到这一点,只需像之前一样执行“git add”,“git commit”和“git push”即可。 2. 或者,你可以“修改”你所做的提交,并推送“修改后”的提交(实际上删除了你推送的第一个(不正确的)提交)。这个选项“重写了历史记录”,只要没有其他人基于这个分支做过工作就可以了。这个选项将完全从历史记录中删除你的错误提交。
如果你想选择第二个选项,需要执行以下步骤:
1. 像创建新提交时一样使用“git add”来暂存你的文件。 2. 使用“git commit --amend”修订之前的提交以反映当前的本地更改。之后,它将具有一个全新的提交哈希(就git而言,它与之前的错误提交没有任何关系)。 3. 使用“git push -f origin”强制推送你的更改。需要使用force选项是因为你正在修改分支历史记录。

请问您能否解释一下如何使用 git commit --amend 添加新文件? - Vinay Prajapati
1
你可以像没有 --amend 标志一样添加它们 - 你可以先运行 git add path/to/file 然后再运行 git commit --amend,或者你可以使用 git commit -a --amend 一次完成两个操作。 - Jim Redmond
好的评论,我会编辑我的答案来考虑到那个。 - mkasberg

2
最简单的方法是执行 reset HEAD
方法一:
1. 储藏你的本地更改。
``` git stash ```
2. 将你的分支重置到提交号为last_commit-1的状态。
``` git reset HEAD~1 ```
或者
``` git reset HEAD^ ```
3. 从储藏中恢复变更。
``` git stash pop ```
4. 如果在 `stash pop` 过程中出现冲突,请解决它们。
5. 提交所有更改,完成操作。使用此方法的优点是你会为自己节省一个提交哈希值。
方法二:
1. 准备另一个包含其他本地更改的提交。
2. 合并更改。
``` git rebase -i HEAD~2 ```
将步骤1中新提交的 `pick` 替换为 `squash`。
3. 保存更改,并修改提交消息(可选)。
我们完成了! 我个人的首选方法始终是使用 `squashing`。但是要小心,尽量在少数人协作的分支上使用,否则,如果有人在本地运行了 `git pull` 而不是 `git reset --hard origin/branch_name`,那么这可能会导致问题。 希望这可以帮助你!

1
以下是您可以执行的步骤:
1.备份本地分支。比如,如果您的分支是master,您的备份分支名称可以是master_backup。您可以使用下面的git命令。 git branch master-backup 如果您在同一分支上。 或者您也可以使用 git branch master-backup master 2.git revert <您的提交ID> 3.解决任何冲突。
4.git push origin master(撤销后推送您的更改)
5.git reset --hard master-backup(将更改还原到本地主分支)

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