web-dev-qa-db-ja.com

Gitは現在のチェックアウトされたマスターからブランチを作成しますか?

メインブランチがチェックアウトされ、ファイルの山全体が変更されてコミットされていないサーバー上にgit制御フォルダーがあります。変更を別のブランチにコミットして、クリーンバージョンに戻る方法はありますか?

つまり、このすべての人の変更を効果的に元に戻したいが、別の機会に保存して、その人が自分の変更を希望する場合は、そのブランチに切り替えられるようにします。

(はい、これはgitが機能するように設計された方法ではないことを知っていますが、それは私の状況です!)どんなアイデアでも大歓迎です。

76
corydoras

まず、現在のHEADに基づいて別のブランチに移動すると、次のように実行されます。

git checkout -b newbranch

すべての変更をコミットします(新しく追加されたファイルがない場合、それ以外の場合はgit addそれら):

git commit -a

Masterブランチに戻ります。

git checkout master

以前にコミットされていない変更はすべてnewbranchブランチにあり、masterはそれらの変更がない状態のままです。

134
CB Bailey

この方法は便利です。

git checkout -B <new_branch> <start point>

どこ:

  • <new_branch>は新しいブランチです(例:my_branch
  • <start point>は開始ブランチです(あなたの場合はmaster
  • -B<start point>から始まる新しいブランチを作成し、既に存在する場合はリセットします(ブランチが既に存在する場合は-bとして失敗しません)
  • 時々-mは、ブランチを切り替えるときに指定するのに役立ちます。これにより、現在のブランチと作業ツリーの内容(スクリプト作成に便利)の間で3方向のマージが実行されます。

詳細については、man git-checkoutを参照してください。

14
kenorb

変更はいつでも隠しておくことができます。

git stash
git checkout -b bravenewmaster
git stash apply

また、「間違った」ブランチにコミットする場合、ブランチはいつでも元に戻すことができます。ブランチはコミットへのポインタにすぎないためです。