管理git分支

管理git分支,git,Git,我正在寻找一些关于如何使用Git实现以下目标的建议: 分支机构: 主稳定支路 不稳定 所有的工作都是在不稳定分支中完成的,在不稳定分支中,代码可能在任何时候都不工作,但我推到它来保存我的进度。当我达到一个稳定点时,我想使master与不稳定点完全相同。我不想在合并和选择不稳定的分支状态时经历所有更改,我只希望它使用不稳定的分支状态并使master完全相同。它可能需要删除一些文件,添加一些文件,更改一些文件。我不想将所有提交从不稳定复制到主控,只需添加一个包含所有更改的新提交即可 我见过的成功的两

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

分支机构: 主稳定支路 不稳定

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

我见过的成功的两种方法是

git checkout master
git reset --hard unstable
但这似乎复制了不稳定中的所有提交,因此我无法将主机推到远程,远程拒绝 或

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

一定有更好的方法,或者完全不同的方法?

git checkout master

git合并不稳定

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

一旦你认为你的合并被破坏了,你可以退回一个提交,合并提交,并将返回到原始状态。儿童用品:

git checkout master
git merge --squash unstable
git commit
将对不稳定分支中自上次合并以来所做的所有更改进行一次提交。

听起来,在不稳定分支中开发时,master不会更改。您有两个选项,具体取决于您希望最终树的外观

假设你从这棵树开始:

A---B         (master)
     \
      C---D   (unstable)
如果您想让master简单地快进到单个主干,则master和Stabile指向同一个提交:

git checkout master
git rebase unstable
结果树:

A---B---C---D  (master, unstable)
A---B-------D'  (master)
     \     /
      C---D     (unstable)
如果要合并,请关闭分支,然后合并回主节点:

结果树:

A---B---C---D  (master, unstable)
A---B-------D'  (master)
     \     /
      C---D     (unstable)
更新为@KurzedMetal非常友好地指出,您不需要这些选项中的任何一个。我认为他的回答是正确的。git合并后的树-压扁不稳定的主节点;git提交看起来像:

A---B---------E  (master)
     \
      C---D      (unstable)
请注意,master和unstable之间缺乏关系。在此之后,您可能希望使用以下方法重置不稳定:

导致:

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

不过,我不知道你为什么要使用这种策略。丢失所有这些历史记录对我来说似乎是不明智的。

看看,这很有趣,我认为他不想要这些结果中的任何一个:我不想将所有提交从“不稳定”复制到“主控”,只需添加一个新的提交和他想要的所有更改一个提交和所有更改,这就是squash所做的。好消息tho+1
A---B---E       (master, unstable)