2011-12-27 32 views
43

私はGitHubからgitリポジトリをクローンし、いくつかの変更を行いコミットしました。私はかなりたくさん作ってしまって、すべてがかなり汚いので、プルリクエストには適していません。今私はorigin/masterからブランチcleanchangesを作成しました。それはきれいなので、良いコミットコメントでコミットするときに変更をコミットしたいと思います。ワークスペースファイルを変更せずに別のブランチに切り替える

私はローカルマスターにいるとき、ファイルを変更せずにcleanchangesに切り替える必要があります。そして私はコミットすることができます。

ファイルを変更せずにブランチを切り替えるにはどうすればよいですか?

私はそれを明確にしたい:ローカルのmasterですべての変更がコミットされている。コミットされていない変更はありません。

答えて

45

編集:私はちょうどあなたがいくつかのコミットを作成したと言われたことに気付きました。その場合には、単一のコミットにするためにgit merge --squashを使用します。

git checkout cleanchanges 
git merge --squash master 
git commit -m "nice commit comment for all my changes" 

編集:あなたがコミットされていない変更がある場合は、以下の答えが適用されます)

だけgit checkout cleanchangesで枝を切り替えます。ブランチが同じrefを参照している場合、コミットされていないすべての変更は、切り替え時に作業ディレクトリに保存されます。

リポジトリ内のファイルがorigin/mastercleanchangesの間で異なる場合は、唯一の競合が発生します。ブランチを作成したばかりの場合は問題ありません。

常に仕事を失う心配がある場合は、まずバックアップコピーを作成してください。 Gitはあなたに最初に尋ねることなく仕事を捨てないように設計されています。

+0

私はすべての変更をコミットしました。 – amorfis

+0

その場合は、私の更新された回答を参照してください。 –

6

ベスト・ベットは、stashに変更とスイッチブランチです。ブランチを切り替えるには、クリーンな状態が必要です。したがって、それらを隠し、新しいブランチをチェックアウトし、新しいブランチに変更を適用してコミットしてください。

+2

ブランチを切り替えるのに必ずしも「クリーンな状態」が必要というわけではありません。 –

+0

問題は変更が既にコミットされていることです。 – amorfis

+1

次に、別のブランチからの変更をマージすることができます。 – vivek85

1

あなたは変更を加え、途中でマスターするようになり、今度はそれらを1つのコミットに結合したいと思っています。

もしそうなら、コミットをrebaseにして、それらを1回のコミットに押しつぶしたいと思うでしょう。

私はあなたが何を望んでいるかを完全には分かっていないので、私はスクリプトであなたを誘惑するつもりはありません。しかし、私はあなたがgit rebaseと "スカッシュ" ingのオプションを読んで、いくつかを試してみることをお勧めします。新しいマージを実行するのではなく、コミット作成したい場合

1

もう一つの方法は、:

git checkout cleanchanges 
git reset --hard master 
git reset cleanchanges 

git status 
git add . 
git commit 

を最初の(ハード)リセットは最後masterにコミットと同じに作業ツリーを設定します。

2回目のリセットでは、元の場所に戻って、cleanchangesブランチの先端を指していますが、ファイルは変更されません。今すぐ追加してコミットできます。あなたは汚れを削除したい場合は、masterから作られた(とあなたはすでにそれをプッシュしていないと仮定した場合)コミット

その後

、あなたはできます

git checkout master 
git reset --hard origin/master 

これは、すべてあなたの新しいコミットを破棄します、ローカルのmasterブランチをリポジトリ内のブランチと同じコミットに戻します。

21

Git。別の支店に切り替える

git checkout branch_name 
+11

これは、untrackedファイル以外のワークスペースファイルを変更します – SMR

+0

aregato gonsaymasu。ありがとうございました。 –

関連する問題