如何删除分支中的特定提交

时间:2017-09-15 00:50:38

标签: git github

这是我的情况。

1)我从其他人那里分配了一个项目

2)我创建了一个单独的分支并在其上编辑了一些文件

3)我从该分支创建了一个Pull Request并将其合并为我的Master。

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

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

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

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

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

Detailed view of my situation

2 个答案:

答案 0 :(得分: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移至 1 - 2 - 3 [master] / A - B - C [origin/master] \ 4' - 5' - 6' [second] 。那是4,5和6.结果就是这样。

origin/master

注意:这假设4,5和6不依赖于1,2和3.如果它们这样做,请将所有内容保留原样并注意拉取请求中的依赖关系。

通常,在使用上游存储库时......

  1. 来自master
  2. 的分支
  3. 不要将任何内容合并或提交给public class Source1 { public string Prop1 { get; set; } public ICollection<Source2> Prop2 { get; set; } } public class Source2 { public string Prop3 { get; set; } public decimal Prop4 { get; set; } public bool Prop5 { get; set; } }
  4. 这可以确保您的请求不会受到本地更改的影响,也不会受到其他请求的影响。

答案 1 :(得分:0)

在您的情况下,您可以尝试执行

  

git reset --hard commit_hash

其中commit_hash是第一次提交删除之前的提交。在两次合并之前,您现在已经处于初始状态的主分支。此时,只需从第二个分支再次合并,它应该可以正常工作

另一个解决方案是尝试:

  

git rebase -i commit_hash

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

警告

这两条指令都会重写git历史记录,你需要执行强制git push

  

git push --force