Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何删除远程分支上的最新提交?_Git_Github - Fatal编程技术网

Git 如何删除远程分支上的最新提交?

Git 如何删除远程分支上的最新提交?,git,github,Git,Github,我将一些代码推送到一个远程分支,但很快就发现了一个bug 我想“取消承诺”,所以我跑了 git reset hard~~ (extra tilde was by accident) 我可能搞错了,因为我修复了错误后,我就开始了,但是当我尝试推的时候,我得到了一个错误。 运行 git status 显示“我的分支和远程分支已分离,并且每个分支有1个和2个不同的提交” 我想这就是它现在的样子: o ---- o ---- A ---- B -- D origin/master (2 commi

我将一些代码推送到一个远程分支,但很快就发现了一个bug

我想“取消承诺”,所以我跑了

git reset hard~~ (extra tilde was by accident)
我可能搞错了,因为我修复了错误后,我就开始了,但是当我尝试推的时候,我得到了一个错误。 运行

git status
显示“我的分支和远程分支已分离,并且每个分支有1个和2个不同的提交”

我想这就是它现在的样子:

o ---- o ---- A ---- B -- D  origin/master (2 commits ahead of A)
               \
                C  myBranch (my work (1 commit ahead of A)
如何更改存储库,使其看起来像

o ---- o ---- A ---- C

强制推送更新
origin/master
以提交C

git push -f
注意:强制推送会更改分支的历史记录,并需要其他已将分支拉入的开发人员

提交图将以以下形式结束:

o <--- o <--- A <--- C  myBranch, origin/master
              ^
              |
              +--- (B) <--- (D)

o您应该从主分支执行此操作,以删除B和D提交(最后2次提交)

注意:请非常确定您在这里执行的操作,因为它将删除您的B和D提交以及历史记录。如果您不确定,请先进行备份

git reset --hard HEAD~2
git push --force

删除B和D后,您可以将分支与A上的C提交合并。

如果其他人已经与此分支合并,这会在将来造成问题吗?我将来可以安全合并吗?如果在删除提交B和D之前创建了新的分支X,则X分支将包含在B和D中所做的更改。当用户尝试合并Bra时nch X在master中,看起来分支X引入了B和D。因此,重新设置分支X的基础以使其与master中所做的更改保持更新非常重要。如果其他人已经与该分支合并(具有B-D的版本),这会不会在将来造成麻烦?我将来可以安全地合并吗?B-D提交将被孤立,并最终被垃圾收集,合并到提交图那一行的任何内容也会被垃圾收集。提交将在您的reflog中保留几个星期,如果您不重新恢复它们,则最终将被删除。是的,您可以安全地在C上继续合并。等等,当您说我可以的时候在C上安全合并,这是否意味着已经与此分支合并的人将来可以与我的分支合并?该人的分支中是否已经有提交B和D?如果他们在我运行git push-f后再次尝试合并,他们的历史会发生什么变化?