我正在寻找一些关于如何使用Git实现以下功能的建议:
分支机构: 主人(稳定的分支) 不稳定
所有工作都在不稳定的分支中完成,其中代码可能在任何时候都不起作用,但我推动它来保存我的进度。当我达到一个稳定的点时,我想让主人与不稳定的人完全一样。在合并并选择不稳定的分支状态时,我不想完成所有更改,我只是希望它使用不稳定的分支状态并使master完全相同。它可能需要删除一些文件,添加一些文件,更改一些文件。我不想将所有提交从unstable复制到master,但只需添加一个包含所有更改的新提交。
我成功实现此目的的唯一两种方法是
git checkout master
git reset --hard unstable
但是这似乎复制了不稳定的所有提交,然后我无法将master推送到远程(被远程拒绝) 或
git checkout master
rm -rf ./*
然后从另一个分支复制所有文件并提交。
必须有更好的方法来实现这一目标,或者采用完全不同的方法吗?
答案 0 :(得分:4)
git checkout master
git merge --squash unstable
git commit
自上次合并以来,将对所有更改(不稳定分支中的提交)进行一次提交。
答案 1 :(得分:4)
在master
中进行开发时,unstable
听起来并没有改变。您有两种选择,具体取决于您希望最终树的外观。
假设你从这棵树开始:
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
之后的树看起来像:
A---B---------E (master)
\
C---D (unstable)
请注意master
和unstable
之间缺乏关系。在此之后,您可能希望使用以下内容重置unstable
git checkout unstable
git reset --hard master
导致:
A---B---E (master, unstable)
但是,我不确定你为什么要使用这种策略。失去所有历史对我来说似乎是不明智的。
答案 2 :(得分:0)
git checkout master
git merge unstable
然后你将进行合并提交,而你在master中的状态与unstable分支完全相同。
一旦你认为你的合并中断了,你就可以回退一次提交(合并提交),并将恢复到原始状态。小孩的东西:)