4

通常我的工作副本中有很多更改,我想提交到不同的新分支,如下所示:

    o   third
  o |   second
o | |   first
| | |
\ | /
  o     base

然后我要做的是:

  • (在“基地”分支上)
  • 创建第一个分支
  • 暂存并提交部分更改
  • 隐藏其余的更改
  • 查看基础分支
  • 应用存储
  • 创建第二个分支
  • 暂存并提交更改的下一部分
  • 隐藏其余的更改
  • ...

Git 不会让我在不隐藏其余更改的情况下检查基本分支,即使它不会(而且我认为不会)产生冲突。

有没有更简单的方法来做到这一点?

4

2 回答 2

3

如果你写:

$ git checkout -b new_branch base

git 将从 base 开始创建一个新分支并保留您的本地更改。相当于

$ git stash
$ git branch new_branch base
$ git checkout new_branch 
$ git stash apply

因此,您的工作流程现在变为:

$ git checkout -b first master
$ git add -p; git commit         # commit changes for first branch
$ git checkout -b second master
$ git add -p; git commit         # commit changes for second branch
# etc
于 2013-11-12T16:37:50.063 回答
1

在您的问题中,您写道您不期望合并冲突。测试git checkout更加保守:当前分支和目标分支中本地修改文件的原始文件(即提交的文件)是否完全不同?

运行以下创建first分支后

$ git checkout -b 先

$编辑..

$ 混帐添加 -p 。

$ git commit -m 先
 1 个文件已更改,1 个插入(+),0 个删除(-)

您可能会看到类似于

$ git结帐基础
错误:您对以下文件的本地更改将被覆盖
查看:
        [文件..]
请在切换分支之前提交您的更改或存储它们。
中止

当试图切换回base.

在这种情况下工作的--merge选项。git checkout

-m
--merge

切换分支时,如果您对一个或多个在当前分支和您要切换到的分支之间不同的文件进行了本地修改,该命令将拒绝切换分支以在上下文中保留您的修改。但是,使用此选项,当前分支、您的工作树内容和新分支之间的三向合并完成,您将位于新分支上。

当发生合并冲突时,冲突路径的索引条目将保持未合并,您需要解决冲突并将已解决的路径标记为git add(或者git rm如果合并应该导致删除路径)。

跑步git checkout -m base会让你回到你开始的地方——但可能比你想要的更远。您将在base分支上进行所有编辑,而不仅仅是针对second和的更改third。对于每次提交,您都需要放弃其他两个分支的更改,而不是逐步削减您的更改。

于 2013-11-12T18:03:47.413 回答