[英]Switching Git workflow from merge to rebase: how to clean up a merge commit history?
我正在嘗試擁有一個良好的Git工作流程來為一個開源項目(Endless Sky)做貢獻,但是當我開始學習時,並沒有得到一個干凈的歷史。 我的工作流程現在是:
upstream/master
在這里 。 upstream/master
鏡像。 我開發的每個功能都有一個分支,它是由我的主人創建的,並且我使用自己的(本地) alpha
和(推送) beta
分支來組合我的功能以進行測試/播放。 我的問題出在我的分叉master上: This branch is 15 commits ahead of endless-sky:master.
沒有文件更改; 它是合並提交消息。 這對我來說似乎很丑陋,所以我做了一些閱讀,特別是文章停止使用'git pull':更好的工作流程 ,我切換到了重新定級/快速轉發。
但是在這種情況下清除現有合並提交歷史記錄的最佳方法是什么? 它也觸及了我的一些功能分支(請參閱: feature/JammingHaywire
),我不想提交PR,因為有意義的提交被無意義的合並提交淹沒了。
我讀過其他各種問題,也不清楚我是否最好:
master
-這樣安全嗎,尤其是對於GitHub? git rebase -i [which commit?]
回到某個點-似乎不起作用。 試了一下回0facf00
,一些犯我分叉很久以前,我的合並提交哈希值(例如3be4d97
看到在GitHub上)不會在文本文件中下降顯示出來。 最終結果保持不變。 我的問題出在我的派生大師上:“這個分支比endless-sky:master提前15次提交。” 沒有文件更改; 它是合並提交消息。
讓我們從這里開始:
重置您的fork master到無盡的天空/ master
假設您已經克隆了叉子:
cd /path/to/fork/clone
git checkout master
git remote add-url endless-sky /url/of/endless-sky
git fetch endless-sky
git reset --hard endless-sky/master
git push --force
現在,簽出您的任何功能分支(您打算從中創建PR),並將其重新建立在您的master分支(現在也代表endless-sky/master
)上
git checkout my_feature_branch
git rebase master
git push --force
第一個選擇是刪除和重新創建master
,這可能是最簡單的。 這是清理方法:
如果還沒有,請切換到master
:
git checkout master
創建備份分支,以防萬一:
git branch backup
重置master
以匹配upstream
master
。 這實際上與刪除和重新創建分支(選項1)相同,但只需要一個命令:
git reset --hard upstream/master
推力:
git push --force-with-lease origin master
強制性警告 :由於重建基准會重寫歷史記錄,因此對於在此分支上工作的任何其他人來說,這可能是危險的/具有破壞性的。 確保與與您合作的任何人清楚地交流所做的事情。 由於這是個人叉子,因此我認為這對您來說不是問題。
現在,您的master
分支是最新的upstream/master
,因此在GitHub上,您應該看到:
This branch is even with endless-sky:master.
如果以后發現缺少任何內容,可以查看backup
的歷史記錄以找到它。
要修復類似損壞的任何功能分支,請執行以下操作:
git checkout myfeature
git rebase -i master
您的編輯器將打開,您將看到提交列表。 刪除包含多余合並的所有行,然后保存並退出。 再次使用--force-with-lease
推送。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.