2016-11-25 141 views
3

我有一個長期運行的本地功能分支,我週期性地壓扁並重新分配與主,以保持它在本地更新。Git rebase一個推送功能分支

完成後,我希望我的功能在主控制器上的一個壓扁的提交中。

但是,我擔心在硬件問題的情況下丟失我的工作,所以我把它推到github上的一個新功能分支作爲預防措施。由於這樣做,我不確定如何讓我的功能分支保持最新,因爲它已經被推送(我寧願不合並創建合併提交的主更改)。

我是唯一使用此功能分支的開發人員。所以我不擔心在已經推送的分支上重寫歷史記錄。推送額外的提交到我的遠程功能分支是否正常,當我完成這個功能時壓縮那個分支,然後將它重新分配給主設備?或者,因爲分支機構已經公開,git會拋出關於分支機構分歧的一些錯誤?

或者,我在想,當我的工作完成後,我可以簡單地解開遠程功能分支(這樣我的本地分支不再與遠程分支有關聯),壓縮本地功能分支中的提交,以及然後重新綁定我的功能分支在本地上的主。

回答

2

將附加提交推送到我的遠程功能分支,當我完成該功能時壓扁該分支,然後將其重新綁定到主設備上,可以嗎?

是的,是的,是的。既然你說你不害怕重寫這個分支的歷史,你可以用它做任何你想做的事情。

或者git會拋出一些有關分支分歧的錯誤,因爲分支已經公開了?

Git沒有公共和私人分支的概念。 你可以公開或私下使用分支, Git不會抱怨。

當你變基上的master,頂你的分支 你基本上從那裏你從時間軸master支點重播你的提交。 如果在該點之後master提交了提交, 並且您在該點之後在您的功能分支中提交了提交, 然後master和您的分支已經發生分歧。 重新綁定時,可能會有衝突, 取決於兩個分支中的更改。

總之,您可以在您的未記錄功能分支中執行任何操作,然後在master之上重新綁定。 當然,取決於你做什麼,重塑可能更容易(很少或沒有衝突)或更難(很多衝突)。 你可能經常重新綁定, 這樣你一點一點發現衝突, 而不是一次衝突很多。

+0

我發現這篇文章似乎表明使用「強制」選項是必需的:http://stackoverflow.com/questions/8939977/git-push-rejected-after-feature-branch-rebase – nogridbag

+0

它看起來像這樣帖子指的是功能分支 - 這是可以接受的。我會想象它等同於我的計劃B,即解開遠程分支的計劃,壓縮並重新綁定到本地,然後創建一個新分支。在功能分支上簡單使用-force似乎更容易。 – nogridbag

+0

當你重寫遠程分支的歷史記錄時,'--force'是必要的(你知道後果)。如果你願意,你可以保留許多備份,推送到新的功能分支,而不用重寫或刪除舊分支。本地跟蹤和追蹤對壓扁和重新綁定沒有影響。本地跟蹤的目的僅僅是爲了減少打字或改進某些操作中的顯示,這非常美觀,並且不會干擾版本控制操作。 – janos