簡體   English   中英

如何將我的git分支壓入同一個分支而無需重新基准化?

[英]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~NN是要壓回的提交次數)有什么困難? 您只需閱讀列表,然后根據需要壓縮提交即可。 重寫歷史記錄 ”指南有更多詳細信息,我認為它非常適合新用戶。

您可以隨時為您的受訓人員創建一個演示分支,以進行練習。 只需為演示目的向分支提交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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM