2017-09-15 120 views
1

这里是我的情况。如何删除我的分支中的特定提交

1)我分叉一个项目从别人

2)我创建了一个独立分支和编辑它的一些文件

3)我创建了从该分支pull请求和它合并到硕士矿。

4)现在我的主人包含这些提交。

5)我创建了第二个分支。并编辑了一些文件。

6)然后我创建了一个'原始'项目回购的拉请求。

7)项目的所有者要求我删除自己合并的那些提交,因为不需要这些代码。

现在,问题是:我无法弄清楚如何从我的单独分支中删除提交。有人能帮我吗 ???做

Detailed view of my situation

+0

你可能会通知主人你”对Git不太熟悉,并且礼貌地要求他们修复这个问题。 – Schwern

回答

1

最简单的事情就是变基上origin/master你的新分支。

您从此开始。

A - B - C [master] 
      [origin/master] 

A,B和C是现有的提交。 master是您当地的分支,origin/master跟踪您看到上游master分支的最后一个地方。他们都指向承诺C.

将新分支合并到master之后,您就有了类似的内容。

  1 - 2 - 3 [master] 
     /
A - B - C [origin/master] 

上游保持在C,但您的本地master现在是3承诺通过它。您当地的master受到本地提交的污染。

当你让你的第二个分支脱离主人并承诺它,你有这个。

    4 - 5- 6 [second] 
       /
      1 - 2 - 3 [master] 
     /
A - B - C [origin/master] 

正如你所看到的,second还包含1,2,3 - 从第一分公司工作。要解决这个问题,请将4,5和6移动到origin/master之上。

git rebase --onto origin/master master second 

,说从一切(但不包括)master(并包括)second走上origin/master。那是4,5和6.结果是这样。

  1 - 2 - 3 [master] 
     /
A - B - C [origin/master] 
     \ 
      4' - 5' - 6' [second] 

注:这是假定4,5,6不依赖于1,2,和3。如果他们这样做,离开一切,因为它是并注意在拉请求的依赖。

一般而言,与上游储存库工作时从... origin/master

  1. 分公司。
  2. 不要合并也不要向master提交任何内容。

这可以确保您的拉取请求不会受到本地更改或其他拉取请求的影响。

0

在你的情况,你可以尝试执行

的git的复位 - 硬commit_hash

其中commit_hash是在提交前第一承诺删除。在两次合并之前,您现在有一个初始状态的主分支。在这一点上,只是再次从你的第二个分支合并,它应该工作

另一种解决方案是尝试:

git的变基-i commit_hash

其中commit_hash之前再次提交是首先承诺删除。在文本编辑器中为你打开git,你需要删除你想删除的两个提交的两行。保存文件,关闭编辑器,git将完成rebase操作,删除两个提交。

警告

两个指令都将改写历史的git,你需要执行强制混帐推

混帐推--force

相关问题