2017-02-26 106 views
6

我在分支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 [email protected]{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直接从另一个分支带来文件,我想知道是否有一种方法来发送文件到另一个分支,没有这一切麻烦。 实际的修改只是几个字符。

+1

如果“没有这一切麻烦”你的意思是“没有检查出来'hotfix'后来又'功能x'”,那么这个问题的[提交文件到不同的重复没有签出分支](http://stackoverflow.com/questions/7933044/commit-a-file-to-a-different-branch-without-checkout)。 (你会发现一些有趣的答案,在那里,不管是否有满意的答案,我都不知道。) –

+0

[将文件提交到另一个没有签出的分支]的可能重复(http://stackoverflow.com/questions/7933044/ commit-a-file-to-a-different-branch-without-checkout) –

+0

我对模糊语言表示歉意。我更多地指的是更少的命令(不涉及别名)。 – Veehmot

回答

4

你可以犯feature-x和变化cherry-pickhotfix,如下所示:

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

我以前从来没有用过樱桃树。该*复制*或*移动*提交?提交将同时在'feature-x'和'hotfix'上? – Veehmot

+1

它复制提交并且是提交将同时存在于两个分支中。 – Arpit

+1

然后,您可以在签出该分支后使用'git reset HEAD ^'重置'feature-x'。 – merlin2011

2

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

# on branch hotfix 
git checkout 4712d filename 
git commit 
相关问题