【发布时间】:2017-07-16 23:07:04
【问题描述】:
我在分支feature-x 做一些工作,突然遇到一个问题,应该在另一个分支hotfix 上真正解决。
我想创建一个包含该更改的提交,但在 hotfix 分支上。
来自this question 我了解标准程序是
# On branch feature-x
git stash
git checkout hotfix
git stash pop
git add -A
git commit -m "Fixed issue #562"
如果我没有对分支 feature-x 进行太多更改,这将起作用,这将与分支 hotfix 发生冲突。我想避免解决不必要的冲突。
为了避免这种情况,我想我只能从存储中提取一个文件,如 this answer 中所述。所以程序是:
# On branch feature-x
git stash
git checkout hotfix
git checkout stash@{0} -- <src/buggyfile.xxx>
git add -A
git commit -m "Fixed issue #562"
然后我应该回到feature-x
git checkout feature-x
git stash pop
虽然there's a way 直接从另一个分支带来 文件,但我想知道是否有一种方法可以将文件发送 到另一个分支,而没有所有这些麻烦。 实际修改只有几个字符。
【问题讨论】:
-
如果“没有所有这些麻烦”的意思是“没有检查
hotfix和以后feature-x”,那么这个问题是Commit a file to a Different Branch Without Checkout 的重复。 (你也会在那里找到一些有趣的答案。我不知道是否有令人满意的答案。) -
我为含糊的语言道歉。我更多地指的是更少的命令(不涉及别名)。
-
从实际的角度来看,在现代(2.6 后)Git 中执行此操作的方法是使用
git worktree add,正如我在可能重复的问题 @das-g 链接中指出的那样。 Arpit 描述的樱桃挑选方法可以工作,但能够打开一个单独的终端或 IDE 窗口,移动到一个名义上独立的(但相同的底层存储库)工作树,并在那里工作,既方便又便宜(只需要一次结帐值得额外的空间)。您可以根据需要保持热修复工作树的长度(或长度)。
标签: git version-control git-branch