【问题标题】:Git correct switching between branchesGit正确切换分支
【发布时间】:2013-11-02 06:13:20
【问题描述】:
所以我在 git 上有两个分支:develop 和 release。直到现在我一直在使用develop 分支。我刚刚提交了develop 分支,我希望它可以在release 分支中使用。我该怎么做?我在这里有点困惑。
1) 当我这样做时,这是否会自动发生
git checkout -b release
2) 要切换回develop 分支,我可以进行结帐,对吗?还是我需要合并?
【问题讨论】:
标签:
git
git-branch
branching-and-merging
【解决方案1】:
您有几个选项可以让一个分支上的提交对另一个分支可用——您的选择取决于您希望以后如何查看历史记录。
-
merge 将在
release 分支上创建一个提交,该分支有两个父节点:develop 的尖端和 release 的前一个尖端。然后release 将拥有来自develop 和release 的所有工作。要将develop 合并到release,请确保您有一个干净的工作副本,然后运行git checkout release,然后运行git merge develop。
- 您还可以在
release 之上cherry-pick 从develop 进行的单个提交。 Cherry-picking 在release 上创建一个新提交,它执行在您命名的提交中所做的确切更改。如果您在develop 上完成了大量工作,这将很有用,但您只希望带来一两件事情。要挑选,请查看git log,复制命名您想要的提交的sha hash,然后运行git checkout release,然后运行git cherry-pick <commit hash>。
- 如果您需要将一些大范围的提交从一个移动到另一个,您可以使用 rebase --onto。它有点高级,但如果您有兴趣,可以read about it。
回答您的后续问题:
不! git checkout 的一般目的是让你的工作副本看起来像你命名的东西。当您运行git checkout release 时,git 会将您工作副本中的实际文件更改为上次提交给release 的状态。 Checkout 不会更改现有的分支。 (另外,如果release 已经存在,则不需要-b;checkout -b 是一次性创建和签出分支的便捷快捷方式。)
同样,要切换回来,您只需再次git checkout develop。
【解决方案2】:
如果要将更改从一个分支带到另一个分支,则必须进行合并。