[英]How to squash my git branch commits into the same branch without rebasing?
我有一個本地分支,我們將git-flow與Pull Requests一起使用,並且在收到PR反饋后希望壓縮一些提交。
如何將所有提交(例如,從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
但我不確定。
經過這么多步驟,使用函數將所有功能綁定在一起,並僅將分支名稱作為參數傳遞,這似乎是一個好案例。 當然,自動化將意味着確保處理錯誤,異常,邊緣情況等。
我不想使用交互式變基,因為要適合我訓練的新手有點棘手。 我也不想知道提交的次數,我只想執行該分支上存在的所有提交。
VonC的答案幾乎就在那里。 但是知道您想退回3次提交非常困難。
相反,您應該使用merge-base
git reset --soft $(git merge-base YOUR_BRANCH WHERE_YOU_BRANCHED_FROM)
git commit
並編輯您的消息(或使用git commit -m代替)
如果您在該分支上,則可以使用HEAD並假設您從master分支出來的命令是(使用origin / master,因為本地master可能已過期)
git reset --soft $(git merge-base HEAD origin/master)
git commit
如果您不記得分支機構的位置,則將PR重新合並到的位置可能是正確的
我認為您的建議是不合常規的,對於新手而言,比使用rebase -i
進行擠壓更棘手。
git rebase -i HEAD~N
( N
是要壓回的提交次數)有什么困難? 您只需閱讀列表,然后根據需要壓縮提交即可。 “ 重寫歷史記錄 ”指南有更多詳細信息,我認為它非常適合新用戶。
您可以隨時為您的受訓人員創建一個演示分支,以進行練習。 只需為演示目的向分支提交5-6次提交,然后讓受訓者使用交互式變基來壓縮提交,然后對您進行PR,以證明他們可以在實時分支上處理該提交。
交互式rebase來git reset --soft
提交(尤其是分支上的連續提交)的替代方法是git reset --soft
。
請參閱“ 使用Git壓縮我的最后X個提交 ”
git reset --soft HEAD~3 &&
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"
這是我之前提到的“ git reset --soft
實際使用 ”之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.