2017-02-26 6 views
6

私はブランチにいますfeature-x私は突然、別のブランチで実際に解決すべき問題に遭遇したときに何か作業をしています。hotfix1つのファイルを別のブランチにコミットします

その変更をコミットするが、hotfixブランチ上に作成したい。

this questionから私は、標準的な手順は、私は枝hotfixとの競合を投げるだろう、すでに枝feature-xに多くの変化が進行中を、持っていなかった場合に働くだろう

# On branch feature-x 
git stash 
git checkout hotfix 
git stash pop 
git add -A 
git commit -m "Fixed issue #562" 

になることを理解しています。私は不必要な競合を解決する必要がないようにしたい。

これを避けるには、this answerに記載されているように、私は隠しファイルから1つのファイルしか抽出できないと考えていました。だから、手順は次のようになります。

# 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" 

そしてからthere's a wayが直接別のブランチからファイルを持っている間、私は戻ってfeature-x

git checkout feature-x 
git stash pop 

に行くべき、私はへの道があるかどうかを知りたいですすべてのこの面倒なことなしにファイルを別の支店に送ってください。 実際の変更はわずか2文字です。

+1

場合は、「すべてのこの手間をかけずに」あなたが意味することにより、この質問はの複製である[別のにファイルをコミットCheckoutなしブランチ](http://stackoverflow.com/questions/7933044/commit-a-file-to-a-different-branch-without-checkout)。満足できるものかどうかは興味深い答えがあります。 –

+0

[チェックアウトなしで別のブランチにファイルをコミットする]可能な複製(http://stackoverflow.com/questions/7933044/)コミット - ファイル - 別の - 分岐なしチェックアウト) –

+0

私はあいまいな言語をお詫び申し上げます。私はより少ないコマンド(エイリアスを伴わない)に言及していました。 – Veehmot

答えて

4

次のようにあなたは、hotfixでそれをfeature-xに変更をコミットし、cherry-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 

は、git-worktreeを使用するために、@torekコメントどおりの答えを拡張:

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-xからhotfixにファイルをコミットするには簡単な方法があります(feature-xブランチに追加したばかりのコミットが4712df727f7303bc95545d0f6a024129be97c5c2):「もう一度 `hotfix`以降`機能-X 'をチェックアウトすることなく、」

# on branch hotfix 
git checkout 4712d filename 
git commit 
関連する問題