簡體   English   中英

管理git分支

[英]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 (單個中繼, masterunstable指向同一提交):

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)

請注意, masterunstable之間沒有關系。 之后,您可能要使用以下方法重置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.

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