2017-07-16 186 views
0

所以這裏是目前的問題。重置爲git commit,除了我最近的提交

所以我抓住了上游分支並做了一些修改並創建了一個提交。

我有一個僱主現在告訴我,我需要做一個公關到他的分支。但是他的分支沒有更新到像我這樣的最新的提交。

所以當我做一個公關時,它也將所有的提交帶到他的分支和上游之間。我只想使用我最新的commnit。

假設這個人很固執,並且不想更新他的分支。我會怎麼做呢?

我現在的解決方案是重置到他當前的分支,幾乎手動添加所有的更改,然後創建提交。這將需要很長時間。

有沒有更好的方法?

回答

1

將您的提交(或提交集)複製到新提交(或一組提交),該提交(或提交集)是在其他人提交的最新提交之後提交的。

這有點令人困惑,所以這可能有助於在這裏有三個人的名字。您有自己的承諾,我們可能會將其標記爲V。有(至少)兩個其他人蔘與:您的僱主E,以及您的上游U

你的上游最新:

...--E--F--G--H--I <-- master (in U) 

你克隆了自己的資料庫,讓他們所有的提交,然後加入自己:

...--E--F--G--H--I <-- upstream/master (in V) 
        \ 
        J--K--L <-- master (in V) 

同時你的僱主的背後是:

...--E--F--G <-- master (in E) 

如果您提出拉動請求,您的請求說「通過L承擔責任」。對於U先生,這是您的三項承諾,J--K--L,因爲他的master結尾爲I。對E先生來說,這是你的三項承諾加上U先生的兩項承諾。

所以,如果你現在你原來提交複製到G之後而來的是新的提交:

   J'--K'--L' <-- anotherbranch (in V) 
      /
...--E--F--G--H--I <-- upstream/master (in V) 
        \ 
        J--K--L <-- master (in V) 

你現在可以發送到E先生,他拉犯L'的請求。由於他的提交字符串在提交G處結束,那麼將會發送給他J',K'L'

E先生最終可能需要更新以匹配U。當他這樣做時,他必須決定如何處理這一事實,即他最終以結尾J'--K'--L'J--K--L。您也必須決定是否保留您的提交副本。

注意:你可以做到這一點提交使用git cherry-pick複印操作(這是相當簡單),或使用git rebase(這是一種自動化摘櫻桃的,並在最後一個最終git reset移動分公司的名字,以便「忘記」原始提交以支持新副本)。櫻桃選擇在概念上更簡單,並且由於此特定操作是「倒退」(backporting),因此除非其他一些(不可預見的/未披露的)考慮因素優先於此,否則我會親自堅持這一做法。

+0

欣賞解釋:)現在更容易理解 –

1

您可以使用櫻桃採摘:https://git-scm.com/docs/git-cherry-pick 創建一個新的分支櫻桃選擇你想要包括在你的PR提交。 並創建您的公關。

+0

謝謝!櫻桃選擇是要走的路 –

相關問題