如何切换本地分支的各种场景

时间:2015-04-23 00:35:48

标签: git git-branch git-stash git-add

使用Git作为我的版本控制时,我需要一些策略。 以下是使用本地分支时的几种情况。 请有人解释我该如何处理这些问题:
A和B是本地分支X是远程分支

  1. 从X中取出A,进行了一些更改。不上演,不承诺,不推。 如何切换到分支B而不丢弃A的更改但不包括在B

  2. 从X中提取A,进行了一些更改。很少未分级(是/否),分阶段更改,未提交,未推送。 如何切换到分支B而不丢弃A的更改但不包括在B

  3. 从X中提取A,进行了一些更改。很少未分级(是/否),分阶段更改,已提交更改,未推送。 如何切换到分支B而不丢弃A的更改但不包括在B

  4. 从X中取出A,进行了一些更改。想要保留这些更改的副本,并希望在A的更改之上同时处理其他2个功能 (我同时处理多个功能的原因是因为我可能正在等待某人听到有关该功能的进一步处理并且不想浪费时间)

  5. 从X中取出A,进行了一些更改。 A被推到远程。想要没有这些更改的旧版本可以使用另一种方法来获得相同的功能。这里有两个子场景:

    1. 在我从A拉出A并将A推回遥控器之前,没有任何人推过任何更改。
    2. 有人在从A拉出A并且在我将A推回远程之前推送了新代码。
  6. 可能确实很少有案例有相同的解决方案,很少有案例可能没有实际意义/无效,但为了理解为什么他们没有实际意义/无效以及为了完整性而张贴它们。 在高层次上我试图了解存储的行为,暂存提交并有一些方便的参考,而不是花费我的开发时间与git杂耍,以便我可以在任何时间点处理不同的功能。 我宁愿不创建新工作区(eclipse)/工作目录(Git)作为解决方案的一部分。

1 个答案:

答案 0 :(得分:0)

以下是你的答案:

  1. 当您的工作目录不干净时,有两种切换到另一个分支的一般策略。第一个(也就是概念上最简单的)选项是在分支A上执行git stash。这会将您上次提交后的所有更改(暂存未分级)放入一个可以存储的存储对象中然后再申请。第二个选项是git commit。虽然看起来第二个选项违反了您的问题,但请耐心等待一下。稍后返回分支A时,您可以继续工作,然后使用git commit --amend提交这些新更改。 A的历史将是干净的,因为它不会为之前的更改单独提交。

    1. 和4.见上面1的答案。
  2. 如果您想从之前的提交中处理A,则可以检出先前的提交。通常,您希望在此方案中创建新分支,因此命令git checkout <SHA-1> -b newA(其中SHA-1是先前提交的哈希)将完成此操作。 关于你的2个子案例,其他人是否会对遥控器上的A的HEAD进行新的更改实际上并不重要。原因是你的新分支newA(基于之前的A提交)将重写历史。唯一可以将这个新分支作为A推送到远程的方法是git push --force

  3. 正如@ cjm628所提到的,你应该花一些时间阅读Git文档,但希望这个答案会给你一个很好的起点。