【问题标题】:How to switch local branches various scenario如何切换本地分支各种场景
【发布时间】:2015-06-30 22:23:37
【问题描述】:

在使用 Git 作为我的版本控制时,我需要制定一些策略。 以下是使用本地分支时的几个场景。 有人可以解释一下我该如何处理这些:
A 和 B 是本地分支 X 是远程分支

  1. A 从 X 中提取,做了一些更改。不上演,不承诺,不推动。 如何切换到分支 B 而不丢弃 A 的更改但不将它们包含在 B 中

  2. A 从 X 中拉出,进行了一些更改。很少有未暂存的(是/否),暂存的更改,未提交,未推送。 如何切换到分支 B 而不丢弃 A 的更改但不将它们包含在 B 中

  3. A 从 X 中拉出,进行了一些更改。很少有未暂存的(是/否),暂存的更改,已提交的更改,未推送。 如何切换到分支 B 而不丢弃 A 的更改但不将它们包含在 B 中

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

  5. A是从X中拉出来的,做了一些改动。 A被推到远程。希望没有这些更改的旧版本为相同功能采用另一种方法。这里有两个子场景:

    1. 在从 X 中拉出 A 之后,在我将 A 推回远程之前,没有人推送任何更改。
    2. 在从 X 中拉出 A 之后,在我将 A 推回远程之前,有人推送了新代码。

可能确实很少有案例具有相同的解决方案,并且很少有案例可能没有实际意义/无效,但我发布它们是为了了解它们为什么没有实际意义/无效并为了完整性。 在高层次上,我试图了解 stash 的行为,暂存提交并获得一些方便的参考,而不是花费我的开发时间来玩弄 git,以便我可以在任何时候处理不同的功能。 我不希望创建新的工作区(eclipse)/工作目录(Git)作为解决方案的一部分。

【问题讨论】:

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


【解决方案1】:

这里是你的答案:

  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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    相关资源
    最近更新 更多