2012-06-22 54 views
1

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

我想这样做是因为我不想在我的工作分支上使用此修补程序,而是在我现在不使用的专用分支上。这是一个大分支,并检查出它:

  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>) 

如果你想要的一切是“干净”(即有引用日志看看正常的提交),那么这里有一个更长的路,相当多的冗长:

$ 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 
+0

哇,我不知道'git read-tree'。我必须尝试解决您的解决方案,这听起来有点冒险和令人兴奋:-)。但有一个问题:你称之为“reflog”? –

+0

reflog是分支和HEAD引用已存储在存储库中的历史记录。 [这是一个例子](https://gist.github.com/3004498)。在那个例子中,最近的“reflog消息”将是“commit:test”。你可以通过运行'git reflog [refs/heads/]'来查看你的版本库。 (如果你没有指定分支,它会假定为HEAD。) – vergenzt

1

您可以从您目前的资料库到另一个目录克隆,并检查了你想要的分支在那里工作? AFAIK,你只能申请一个补丁,或樱桃选择提交等到您的工作目录中的文件。

对于我工作的一些项目,我的系统上有多个版本库,每个版本都有不同的分支。

+0

这实际上可能是我必须要做的。 –

+0

@ m-ric Idk如果你已经做到了,但我想出了一个办法。 :D(我为此感到自豪。) – vergenzt

+0

@vergenzt不,我还没有想出一个办法。我认为Peter van der Does是对的,我将如何处理补丁失败?我重建了我的内核,就像我每天早上做的这几天一样...... –

1

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

,你将如何处理补丁失败?

+0

嗯,这很有道理。我同意这会很复杂。 –