[英]Managing git branches
我正在尋找有關如何使用Git實現以下目標的建議:
分支:主(穩定分支)不穩定
所有工作都在不穩定的分支中完成,在該分支中代碼可能在任何時候都不起作用,但我將其推送以保存進度。 當我達到穩定點時,我想使母盤與不穩定盤完全相同。 合並並選擇不穩定的分支狀態時,我不需要經歷所有更改,我只希望它使用不穩定的分支狀態並使master完全相同。 它可能需要刪除一些文件,添加一些文件,更改一些文件。 我不想將所有提交從不穩定版本復制到主版本,而只需添加一個包含所有更改的新提交即可。
我看到成功完成此操作的唯一兩種方法是
git checkout master
git reset --hard unstable
但這似乎將所有提交復制到不穩定狀態,然后我無法將master推送到遠程(被遠程拒絕)或
git checkout master
rm -rf ./*
然后從另一個分支復制所有文件並提交。
必須有更好的方法來執行此操作,或者可能是完全不同的方法?
git checkout master
git merge --squash unstable
git commit
自上次合並以來所做的所有更改(在不穩定分支中的提交)將進行一次提交。
聽起來在unstable
開發過程中master
不會改變。 根據最終樹的外觀,您有兩種選擇。
假設您從這棵樹開始:
A---B (master)
\
C---D (unstable)
如果您希望master
簡單地快進到unstable
(單個中繼, master
和unstable
指向同一提交):
git checkout master
git rebase unstable
結果樹:
A---B---C---D (master, unstable)
如果要合並提交( unstable
分支會分支,然后合並回master
):
git checkout master
git merge --no-ff unstable
結果樹:
A---B-------D' (master)
\ /
C---D (unstable)
更新由於@KurzedMetal足夠友好地指出,您不希望使用這些選項中的任何一個。 我認為他的回答是正確的。 git merge --squash unstable master; git commit
之后的樹- git merge --squash unstable master; git commit
git merge --squash unstable master; git commit
看起來像:
A---B---------E (master)
\
C---D (unstable)
請注意, master
和unstable
之間沒有關系。 之后,您可能要使用以下方法重置unstable
:
git checkout unstable
git reset --hard master
導致:
A---B---E (master, unstable)
不過,我不確定您為什么要使用此策略。 失去所有的歷史對我來說似乎是不明智的。
git checkout master
git merge unstable
那么您將有一個合並提交,並且您在master中的狀態與不穩定分支完全相同。
一旦您認為您的合並已中斷,就可以回退一個提交(合並提交),然后將其恢復為原始狀態。 孩子的東西:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.