【问题标题】:Commit a single file to another branch将单个文件提交到另一个分支
【发布时间】: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


【解决方案1】:

您可以在hotfix 中提交feature-xcherry-pick 中的更改,如下:

# On branch feature-x
git add <file>
git commit -m "Fixed issue #562" // Note commit-id
git checkout hotfix
git cherry-pick <commit-id>
git push origin hotfix

根据@torek 评论扩展答案,使用git-worktree,如下:

git worktree add -b hotfix ../hotfix origin/master
cd ../hotfix/
git add <file>
git commit -m "Fixed issue #562"
git push origin hotfix

【讨论】:

  • 我以前从未使用过cherry-pick。那会 copy 还是 move 提交?提交会同时在feature-xhotfix 上吗?
  • 它复制提交,是的,提交将同时存在于两个分支中。
  • 您可以在签出该分支后将feature-x 重置为git reset HEAD^
【解决方案2】:

要将文件从feature-x 提交到hotfix,有一种简单的方法可以做到这一点(假设您刚刚在feature-x 分支上添加的提交是4712df727f7303bc95545d0f6a024129be97c5c2):

# on branch hotfix
git checkout 4712d filename
git commit

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 2011-05-06
    • 2012-09-02
    • 1970-01-01
    • 2012-12-03
    • 2016-09-15
    • 2016-03-23
    • 2018-08-12
    • 2021-03-22
    相关资源
    最近更新 更多