2011-06-25 210 views
3

在我目前的項目中,我使用的是開源論壇(https://github.com/vanillaforums/Garden)。我打算做這樣的事情:Git子樹工作流程

git remote add vanilla_remote https://github.com/vanillaforums/Garden.git 
git checkout -b vanilla vanilla_remote/master 
git checkout master 
git read-tree --prefix=vanilla -u vanilla 

這樣我可以做出改變成香草文件夾(如更改配置),並提交到我的主分支,我也可以切換到我的香草分支獲取更新。我的問題是,當我嘗試合併分支一起

git checkout vanilla 
git pull 
git checkout master 
git merge --squash -s subtree --no-commit vanilla 
git commit -a -m "update commit" 

的問題是,「更新承諾」在我提交的頂雲和「覆蓋」我的變化。我寧願讓我的提交在更新之前重播。有沒有簡單的方法來做到這一點?我不擅長git,所以也許這是錯誤的做法。另外,我真的不想把我的歷史和香草歷史混爲一談。

+1

我有同樣的問題,我只想這樣做(從http:// git-scm。com/book/en/Git-Tools-Subtree-Merging):「Rack項目中的所有更改都已合併並準備在本地提交,您也可以做相反的操作 - 在主分支機架子目錄中進行更改然後將它們合併到您的rack_branch分支中,以便將它們提交給維護者或將其推送到上游。「然後執行合併命令。他們提到它,但沒有示例命令。 – Rivera

+0

@ernipiggy您是否找到了從子樹推送的方法? – abel

+1

@abel我試着在下面解釋 – Rivera

回答

3

我完成了這個計劃:

  1. 工作對我發展分支觸摸文件從子樹

  2. 更新分支壓扁發展提交:

    混帳合併-s子樹--squash --no提交發展

  3. 更新子樹分支與其遠程存儲庫。

  4. 更新發展與壓扁提交:

    混帳合併--squash -s子樹--no提交

0

我也是沒有一個Git主(見我做什麼有;-))...但是,我想你可能想看看在底墊命令:

http://book.git-scm.com/4_rebasing.html

+2

謝謝,但我沒有看到rebase命令如何可以有任何幫助,因爲這兩個分支不共享任何常見的「基礎」。 – Cedric

1

使用

git merge --squash -s subtree --no-commit vanilla 

不會「覆蓋」您的更改。我希望通過「更新提交」來表示您在子樹合併後所做的提交,因爲它具有--no-commit,並且不會自行提交。

+0

是的。不過,從那時起,我能夠獲得正確行爲的唯一方法就是重新設置-i,並在我的更改下推回提交,並且我不太喜歡那樣.. – Cedric

3

如果您想使用子樹,可能需要使用git subtree。它爲這類事情提供了一個更友好的用戶界面,包括在子樹中合併的合併/拉取命令(壓縮是可選的)和分離/推送命令,以便將一個子樹的變化分開並將它們發回給它自己回購。