如何在未签出的分支上应用git补丁?

时间:2012-06-22 17:41:11

标签: linux git tags

我想知道是否可以在未签出的分支上应用git补丁?

我想这样做是因为我不想在我的工作分支上使用这个补丁,而是在我现在不使用的专用分支上。这是一个很大的分支,检查出来会:

  1. 让我的旺盛标签无用或破碎。重建它们需要很长时间。
  2. 另外,如果我签出这个分支并回滚到我的工作分支,我的内核将强制重建...

3 个答案:

答案 0 :(得分:1)

您可以从当前存储库克隆到另一个目录,并查看您要在那里工作的分支吗? AFAIK,您只能对工作目录中的文件应用补丁或者提取提交等。

对于我工作的一些项目,我的系统上有一个存储库的多个副本,每个都检查了不同的分支。

答案 1 :(得分:1)

我认为这不可能主要是因为这个原因:

你将如何应对补丁失败?

答案 2 :(得分:1)

这是非常间接的,但可能。您可以通过仅将其应用于索引来实现。

简单方法:

$ git read-tree <branch>
$ git apply --cached <patch>
$ git update-ref refs/heads/<branch> \
    -m "<optional reflog message>" \
    $(git commit-tree $(git write-tree) -m "<message>" -p <branch>)

如果你想让一切都变得“干净”(即让提交的reflog看起来正常),那么这里的方法更长,更详细:

$ git checkout -b temp             # Create a temp branch
$ git reset --mixed <branch>       # Reset the index to the branch you want
$ git apply --cached <patch>       # Apply the patch to the index
$ git commit                       # Create a commit object

  # Move the branch's reference to the new commit
$ git update-ref refs/heads/<branch> refs/heads/temp

  # Clean up
$ git checkout --force <original_branch>
$ git branch -d temp