2017-09-15 51 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

相關問題