2015-01-16 73 views
2

假設我已經分叉了https://github.com/user/proj.git並且在叉子的(主分支)上做了重要的開發。如何爲您已分叉的項目做出貢獻?

我想解決上游存在的問題(我沒有在我的fork中修復)。如果我理解正確的話,我應該創建一個特性分支關閉上游對他們的主人最後一次籤的:

git fetch upstream 
git checkout upstream/master 
git checkout -b my_new_feature 

這些命令的第二個讓我知道,我在「分離的頭」狀態..是我需要關心的任何事情(瞭解執行此任務)?

現在,我做我的變化,然後將修改後的文件git addgit commit,然後git push到github上,但是當我創建一個拉請求,我聽說我的拉力要求不能自動合併,因爲沒有發生衝突我做過的更改以及在執行git fetch後檢查爲upstream/master的更改。

衝突的變化在語義上是等效的,所以我想推遲到upstream/master的版本。在解決衝突的同時,我如何重新設置(這正是我想要做的,對吧?)upstream/master我的拉動請求? (我很熟悉Subversion和git中的新手,如果這有助於回答..)

回答

1

是此拉請求出現問題,因爲它包含/主用做向上遊的變化的衝突後我分支的它

需要「他提供一個適當的衍合分支」的步驟是什麼?

A「適當的衍合分支」是指衍合上的upstream/master頂部分支(具有上游是,你已付出原始回購的名稱)

git fetch upstream 
git checkout myBranch 
git rebase upstream/master 

(I也描述在「該步驟Pull new updates from original Github repository into forked Github repository「)

你也可以做一個變基互動,如果你想清理了一下你的分支(git rebase -i

史那方式,你解決你的本地克隆中的任何衝突,並且你的分支到你的分支。
如果您已經有一個PR(拉取請求)正在進行中,它會自行更新以考慮您的重新設計分支的修訂歷史記錄。

目標仍然是原始項目的維護人員將他/她的分支合併到他/她的主分支中,並通過一個微不足道的合併(0衝突)來完成。

0

當您在github上分發項目時,您將創建自己的並行存儲庫。

Github在原始項目上使用「拉取請求」以允許您請求具有提交權限的用戶從您的分支中提取更改。

+0

是的,我想我明白了。我有我自己的fork,我的fork連接到上游,我獲取上游,所以我的wc知道在那裏做的更改,然後我在fork中創建一個新分支,但是沒有上游最新簽入。我推到我的叉子,然後創建一個拉請求。正是這個拉取請求是有問題的,因爲它包含了與分支之後對上游/主服務器所做更改的衝突。 – thebjorn

+0

然後,您需要合併上游所做的更改並使代碼正常工作,然後_then_創建請求。這實際上是一件非常好的事情,因爲它給提交者帶來了負擔,而不是合併。 –

+0

所以你不應該在這種情況下重新綁定..? – thebjorn

1

要完成托爾比約恩Ravn的安德森的回答和評論:

一切之前,您應該提供維護無痛合併,這意味着是最新的關於主分支。

當維護者合併拉請求,他可以選擇的方式:

  • 壁球它變成一個承諾。
  • 將拉取請求樹合併爲一個整體。

在第一個選項中,提交的大小/註釋/分隔並不重要,因爲所有內容都將由維護者評論一次。

在第二個選項,您的分支的每一個提交是很重要的。因此,每個提交必須表示一個邏輯工作單元(例如,您不應該提交修復您在分支中引入的錯誤或提交導致非函數項目的錯誤)。你總是可以推動你的pull request分支,使它變得漂亮。

關於爲最新的主分支應該應用相同的邏輯。提交「將主合併到Pipo中」根本不是有用的,您應該重新分支以使「合併」不可見。

最後但並非最不重要的,每次維護都有自己的習慣,因此,如果代碼,測試和文檔始終seperatly COMMITED或分組,你也應該這樣做。無論如何,如果維護人員發現了一些關於它的信息,那麼當你發佈一個請求時,你可以與他討論並按照他認爲合併的方式改變它。

+0

當發生衝突時,我的分支會重新綁定的步驟是什麼? – thebjorn

+1

@thebjorn我在回答中描述的那些人:目標是檢測本地克隆中的衝突,而不是原始回購的維護人員告訴他們存在衝突(當他/她嘗試將您的PR合併到原始回購) – VonC

相關問題