2015-12-03 31 views
2

我有,我想在主交互式衍合一個特性分支,如:在magit中,我可以交互式重新綁定到另一個分支嗎?

A - B - C - D (master) 
    \ 
     E - F (feature) 

期望的結果是

A - B - C - D (master) - E - F (feature) 

與運行一些理智檢查腳本E和F(使用EXEC後在rebase-todo文件中)。

但是,如果我去magit的日誌緩衝區,並與點式r e提交D,magit執行git rebase -i D^代替git rebase -i D,因此該功能的提交是從C重播。我想要的是重新貼上主人的尖端,而不是主人^。

所以:

  1. 有沒有辦法迫使magit立足於D,在那裏我在日誌緩衝區指向,而不是我指着其中的父級的互動變基?
  2. magit似乎不會在非交互式rebase中自動追加^。爲何差異?不知何故,跨分支互動式重新啓動是一個壞主意?

順便說一句,我知道有解決方法:我可以下降到命令行;我可以把它分成一個分支機構內的交互式重新分配,然後是非交互式分配;或者我可以對master進行虛擬提交。他們都不是很方便。我想知道的是,如果有一種方法可以一步完成,或者如果沒有,我是否應該瞭解其背後的某些智慧。

+0

我建議您使用http://emacs.stackexchange.com/來查詢有關Emacs的問題。 – tarsius

+0

感謝提示,@tarsius。下次會這樣做。 –

回答

1

在Git中,必須在第一次提交之前選擇提交之前要提交的提交。在Magit中,必須選擇第一個要進行重設的提交。就這麼簡單 - 選擇你想要的第一次提交。

問:爲什麼要在Git中選擇「before commit」?

答:因爲這就是如何在所有Git中解釋FROM..TOFROM是排他性的,並且包括TO。從有意義的「語言」角度來看。

問:爲什麼Magit中不一樣?

答:因爲在Magit的用戶界面上這並沒有多大意義。 「選擇X必須選擇Y,因爲它在X之前出現」有點奇怪。

這也會讓它在某些情況下難以啓動rebase。例如。狀態緩衝區列出了未提交的提交。要交互重新分配這些提交中的一部分,將轉移到第一次要提交的提交,並且要重新提交併且r。第一次重新承諾可能是第一次未完成承諾。如果您必須在「之前」選擇提交,那麼狀態緩衝區中不容易實現,因爲「最後一次提交的提交」不是「尚未推送的提交」的一部分,而且因此沒有列出。相反,您必須在單獨的緩衝區中顯示完整的日誌(ll),移至提交,啓動rebase,然後退出日誌緩衝區以返回狀態緩衝區,其中正在進行rebase的信息正在顯示。


此外,您正在使用錯誤的命令「移植」到另一個分支。請使用r r。如果master已正確配置爲feature的上游,則將作爲分支的默認選項提供,以將當前分支重新綁定到

相關問題