我在分支上有一个推送提交(它不是主要的回购分支)。这是我做的最后一次提交。我想从repo中删除它。推后我已经做了一些局部更改(在同一个分支处)
我想在本地保留所有更改。
我要git revert <commit>
而不是git add .
- &gt; git commit
- &gt; git push origin my-branch
?
答案 0 :(得分:2)
如果我错了,请纠正我,但这是我对你情况的理解:
git commit
在本地提交了这些更改。git push
将更改推送到远程存储库(Github?)。如果这是正确的,从这一点来说,你有两个选择。你可以:
git add
,git commit
和git push
,就像之前一样。如果你想做选项2,你需要:
git add
用于暂存文件,就像您在创建新提交时一样。git commit --amend
使用您当前的本地更改修改先前的提交。在此之后,它将有一个全新的提交哈希(就git而言,它与之前的错误提交无关)。git push -f origin
强制推送您的更改。强制是必需的,因为您正在更改分支历史记录。答案 1 :(得分:0)
以下是您可以执行此操作的步骤。
取回当地分行。假设您的分支是主分支,并且您的后备名称类似于master_backup。你可以使用下面的git命令。
git branch master-backup
如果你在同一个分支上。
或者您也可以使用
git branch master-backup master
git revert <your commit id>
如果有任何冲突,请解决。
git push origin master
(还原后推送您的更改)
git reset --hard master-backup
(将您的更改返回给当地主人)
答案 2 :(得分:0)
最简单的方法是reset HEAD
。
方法1:
git stash
git reset HEAD~1
或
git reset HEAD ^
git stash pop
在stash pop
期间发生任何冲突时解决。
现在将所有更改一起提交,您就完成了。
这种方法的优点是你可以为自己保存1个提交哈希值。
方法2:
这种方法是
您只需使用其他本地更改准备另一个提交。
现在按如下方式压缩更改。
git rebase -i HEAD~2
将pick
替换为squash
,以获取您在步骤1中进行的最近提交。
我们完成了!
我个人的偏好始终是使用squashing
。但是有一个预防措施,即通常在较少的人在分支机构上工作时使用它,如果某人新手做了git pull而不是本地的git reset --hard origin/branch_name
,那么它可能变成地狱。
希望它有所帮助!