2016-12-10 14 views
1

私はブランチAで作業していますが、緊急に修正する必要があります。どのブランチを作成するにはどうすればよいですか?変更?別のブランチに移動して現在の変更を保存する

ブランチAのすべてのファイルをチェックアウトする必要はありません。ブランチBの作業が完了したら、続行したいと思っています。

未完成のため、ブランチAをプッシュしたくありません。

+0

マスターの分岐Bを作成するだけです。 –

+0

@ DanielA.WhiteブランチAのすべてのファイルをチェックアウトする必要はありません。ブランチBの作業が完了していれば続行できるようにしたいからです。 gitで –

+0

を実行すると、一度にすべてのファイルをチェックアウトしますが、ブランチ間を簡単に切り替えることができます。 –

答えて

0

オプション1:あなたが支店Aの変化がある場合は、変更内容

を隠しておくことができます。 分岐Aにいる間、変更を取得するには

git stash save "hint_to_what_stash_contains" 

を行い、

git stash apply 

複数のスタッシュがある場合は、それらをリストし、適用するスタッシュを選択することができます。

git stash list 
git stash apply [email protected]\{<STASH_NUMBER>\} 

オプション2:変更を確定します。

まず、branchAのすべての変更をコミットしますが、起点にプッシュしないようにしてから、作業を行うブランチbを作成します。 branchBが完了すると、ブランチAをチェックアウトして作業を再開できます。

オプション3

branchA

git checkout brancha 
edit files 
git add <file(s)> 
git commit --amend # You can also change the commit message if you want. 
に作業を再開するために:私はお勧めしませんが、パッチのことですが..私は何人かの人々がそれを使用し見てきました。 git diffを実行してファイルに保存してください。例えば、 "branch_a_changes.patch"と作業を再開したい場合は、 git apply branch_a_changes.patch

1

Aで変更をコミットできます。その後、チェックアウトBBが完了したら、Aに戻り、続行します。

または、「A」の変更をコミットしたくない場合は、stash(別の場所に保存)に変更を加えます。チェックアウトをBにして、Aに戻ると、(stash pop)の変更がstashになります。

Stashingは、作業ディレクトリのダーティな状態になります - つまり、あなたの変更は、ファイルを追跡し、変更を上演 - あなたはいつでも

    を再適用することができ未完成の変化のスタック上に保存します
  • オプション-1:スタッシュ

    $ git checkout A      # chekcout A 
    $ git commit -am 'tmp commit'   # add & commit 
    
    $ git checkout B      # checkout B 
    // fix your urgent changes here 
    
    $ git checkout A 
    // continue A 
    
  • オプション-2をコミット

    $ git checkout A  
    $ git add . 
    $ git stash       # save unfinished changes 
    
    $ git checkout B      # checkout B 
    // fix your urgent changes here 
    
    $ git checkout A      # checkout A 
    $ git stash apply      # retrieve the changes from stash 
    
    // you can clear the stash 
    $ git stash drop      # remove the changes from stash 
    
+0

単一分岐のコミット。隠れている間に複数の支店で変更を適用できますか? –

+0

@ Jamie Andersonはい、どのブランチでも、単に 'git stash apply'コマンドで変更を取り戻すことができます。 –

2

git worktree --helphttps://git-scm.com/docs/git-worktree)からは、リファクタリングのセッションの途中であり、あなたの上司は に来て、あなたはすぐに何かを修正要求。あなたは disarray(新しいファイル、移動されたファイル、削除されたファイル、その他のビットとピースが混在しています)の状態になっています。 は通常、git-stash(1)を使って一時的に変更を保存します。あなたはそれを邪魔しないように を危険にさらしたくありません。代わりに、一時的にリンクされた作業ツリーを作成して緊急修正を行い、完了したらそれを削除して、 にして、以前のリファクタリングセッションを再開します。

 $ git worktree add -b emergency-fix ../temp master 
     $ pushd ../temp 
     # ... hack hack hack ... 
     $ git commit -a -m 'emergency fix for boss' 
     $ popd 
     $ rm -rf ../temp 
     $ git worktree prune 
+0

'git worktree add'はGit 2.5で新しくなりました。2.6以降の重要な修正が加えられました。私は2.9以降でそれを使用し始め、それを今推奨しています。 – torek

関連する問題