0

我正在寻找一些关于如何使用 Git 实现以下目标的建议:

分支:master(稳定分支)不稳定

所有工作都在不稳定的分支中完成,其中代码可能在任何时候都不起作用,但我推送它以保存我的进度。当我达到一个稳定点时,我想让 master 和不稳定的完全一样。我不想在合并和选择不稳定的分支状态时经历我的所有更改,我只希望它使用不稳定的分支状态并使 master 完全相同。它可能需要删除一些文件,添加一些文件,更改一些文件。我不想将所有提交从不稳定复制到 master,而只是添加一个包含所有更改的新提交。

我见过的唯一两种成功做到这一点的方法是

git checkout master
git reset --hard unstable

但这似乎复制了不稳定的所有提交,然后我无法将 master 推送到远程(被远程拒绝)或

git checkout master
rm -rf ./*

然后从另一个分支复制所有文件并提交。

必须有更好的方法来做到这一点,或者可能是完全不同的方法?

4

3 回答 3

4
git checkout master
git merge --squash unstable
git commit

将使用自上次合并以来所做的所有更改(不稳定分支中的提交)进行一次提交。

于 2012-04-12T16:07:57.540 回答
4

听起来master在您开发时不会改变unstable。您有两种选择,具体取决于您希望最终树的外观。

假设您从这棵树开始:

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看起来像:

A---B---------E  (master)
     \
      C---D      (unstable)

master注意和之间没有关系unstable。在此之后,您可能希望使用以下命令进行重置unstable

git checkout unstable
git reset --hard master

导致:

A---B---E       (master, unstable)

不过,我不确定您为什么要使用此策略。失去所有这些历史对我来说似乎是不明智的。

于 2012-04-12T16:18:19.547 回答
0

git checkout master

git merge unstable

那么您将有一个合并提交,并且您在 master 中的状态将与不稳定分支完全相同。

一旦你认为你的合并中断了,你可以回退一个提交(合并提交),然后回到原始状态。孩子的东西:)

于 2012-04-12T15:56:04.877 回答