2015-12-04 97 views
7

我有一個本地分支,我們正在使用pull請求的git-flow,並且在收到PR反饋後,我正在尋找一些提交。如何擠壓我的git分支提交到同一分支沒有rebasing?

如何將我的所有提交(例如PR)提交到同一分支?

我想這會是這樣的:

git checkout master     # For master 
git pull        # Get all branches up-to-date 
git checkout feature1     # Checkout the branch 
git checkout -b feature1_squash  # Make a copy of the branch 
git branch -D feature1     # Delete original branch 
git checkout master     # (?) Branch off latest master for safety 
git checkout -b feature1    # Make new (empty) original branch 
git merge --squash feature1_squash  # Merge with squash into it 
git push -f feature1     # Push, force will be required 

,但我不知道。
有了這麼多的步驟,它似乎也是一個很好的例子,使用一個函數將它們結合在一起,並將分支名稱作爲參數傳遞。當然,自動化將意味着要確保處理錯誤,例外情況,邊緣情況等。

我不想使用交互式底座,因爲對於我培訓的新手來說有點棘手。我也不想知道提交的數量,我只想做這個分支上存在的所有提交。

+1

我不明白你想要什麼。你有幾個分支,每個分支有不同的提交,你想把它們全部放在一個分支上,這樣就失去了發展歷史? – houtanb

+1

我有1個分支('feature1')與幾個提交,我希望有1個提交。 –

回答

1

我認爲你的建議是非常規的,對於新手來說比使用rebase -i壓扁更棘手。

關於git rebase -i HEAD~N有什麼難點(N是提交回扣的次數)?您只需閱讀列表,然後根據需要壓縮提交。 「Rewriting History」指南有更多細節,我認爲它非常適合新用戶。

您可以隨時製作演示分支讓您的學員練習。只需將5-6分支交給分支機構進行演示,並讓學員通過交互式分配壓縮承諾,然後向您發佈PR,以證明他們可以在實時分支上處理它。

+0

謝謝。重新貼牌一直給我們帶來問題。(太)長故事。如果我的步驟可以打包成一個函數,它會隱藏複雜性。我們可以做一個演示分支,但我們仍然會遇到拉取請求評論進來的情況,並且我們做了一個小改動,並且我們想要壓縮它。 –

+1

我仍然認爲隱藏複雜性(並且規避工具的典型用例,並使用外部工具來引起相同的行爲)對您的受訓者是不利的。我確實認爲,作爲優秀的程序員,一旦他們重新發布了幾次,它就會成爲第二天性。 你也可以使用像gitosis(https://git-scm.com/book/en/v1/Git-on-the-Server-Gitosis)這樣的工具來控制對各種特徵的訪問,儘管它也有它自己的層複雜。 無論如何,祝你好運,希望他們能夠好好學習! – Todd

+0

忘記gitosis,它不再被維護。 gitolite取代它並保持它。 –

4

VonC的答案几乎就在那裏。但知道你想要回3是非常困難的。

,而不是你應該使用merge-base

git reset --soft $(git merge-base YOUR_BRANCH WHERE_YOU_BRANCHED_FROM) 
git commit 

和編輯信息(或使用git的承諾,而不是-m)如果你的

分支上,你可以使用HEAD和假設你從主分支您命令將(由於本地主可能已過時,使用原點/主點)

git reset --soft $(git merge-base HEAD origin/master) 
git commit 

如果你不記得你在哪裏分支從,你正在合併公關的地方可能是正確的

+0

加上一個不需要知道提交的數量 –