2015-06-23 33 views
4

我们2开发人员正在分支。我做了2次提交,并推送了它们,之后我们决定我们不再需要它们了。修复git分支后,另一个开发人员做了重置

我在012之前做过git reset -i <sha>提交,然后强制推送它到github上的分支。

另一个开发人员有一个代码的本地副本,与我的2个提交,还有他自己的一些提交,他没有被推到github上。

我们不知道该怎么做才能保留他的代码并提交,但删除了我从推送的github分支中删除的两个提交。

任何想法?

回答

3

如果我理解这个正确的,其他开发者的本地分支看起来像这样(按时间倒序):

+- (F) His last commit (Required) 
+- (E) His commits 2, 3, 4, etc ... (Required) 
+- (D) His commit 1 (Required) 
+- (C) Your commit 2 (To be discarded) 
+- (B) Your commit 1 (To be discarded) 
+- (A) Base commit (one that you reset to) 

你想接他的承诺d,E,F,并扔掉你提交B和C.如果是这样,在他的分支下面:

  • 创建一个标签犯F.
  • 复位承诺A.
  • 摘樱桃承诺d,E,F。(你可以需要解决合并冲突。)
  • 强制推送到远程分支。

这应该达到你想要什么,但是,我想提出以下建议,除非你有一些强有力的理由来这样做:

  • 您再次提交撤消更改,并推送到远程。
  • 其他开发人员将提交此新提交,并重新整理其更改。
  • 然后他把它推到远程。

最终结果将是相同的,除了三个“额外”提交,B,C和“撤消提交”。这确实避免了推力,这本身不是“错误的”,但可能导致有时会导致问题。它还保留了历史上不需要的代码,如果将来需要它,也许在不同的环境中。

+0

非常感谢! – NibblyPig