マスターでコミットされていない変更をGitによって新しいブランチに置く


回答:


151

テストブランチにチェックアウトして、コミットするだけです。別のブランチに移動しても、コミットされていない変更は失われません。

あなたがマスターブランチにいるとします:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

削除されたファイルについては本当にわかりませんが、使用時に含まれていないと思います git add .


12
変更がそのブランチと競合するため、チェックアウトが失敗することがあります。マージするためにcheckout -mを試すことができます。
Jouni K.Seppänen、2010年

2
私はこれを試しましたが、エラーが発生しました:エラー:次のファイルに対するローカルの変更は、チェックアウトによって上書きされます。ブランチを切り替える前に、変更をコミットするか、隠しておいてください。
ishwr 2013

これは機能しますが、stashを使用するという答えが推奨されます、IMO。多分個人的な選択かもしれませんが、それは論理的にクリーンなワークフローであり、便利なコマンドであるSTASHを導入します。
Patrick

見出しが質問が「新しい」ブランチに関するものであることを示唆しているため、オプション「-b」がありません。
Guntram

195

また、次のようにして新しいブランチを作成し、それに切り替えることができます。

git checkout -b new_branch
git add .

コードの編集を開始する前に新しいブランチを開始することを常に忘れているため、これを常に使用します。


3
@jouniが他の回答で指摘したのと同じ問題-追加の変更が元の変更と競合する場合、ブランチをマスターにマージするのが困難になることがあります。IMOこのスレッドは、より良い質問に答える:stackoverflow.com/questions/556923/...
JPW

短くて甘くて心強い...「私はいつもこれを使っています...」
ϹοδεMεδιϲ

1
new_branchでコミットすることを忘れないでください。masterブランチに切り替えて変更されたファイルを元に戻すと、new_branchでもファイルが失われます。
petrsyn 14年

36

なぜgit stashを使用しないのですか?コピーアンドペーストのように、より直感的だと思います。

$ git branch
  develop
* master
  feature1
  TEST
$

現在のブランチに移動したいファイルがいくつかあります。

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

他のブランチに移動します。

$ git checkout TEST

そして、適用する

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

またgit stash、を使用しているのも気に入っていますgit flow。これは、作業ディレクトリで変更がまだ行われているときに機能ブランチを終了したいときに文句を言います。

@Mike Bethanyのように、これはいつも私に起こります。私がまだ別のブランチにいることを忘れている間に、新しい問題に取り組んでいるためです。だから、あなたの仕事を、そして新しいブランチに隠しおくことができます。git flow feature finish...git stash applygit flow feature start ...


2
git stashコミットされていない変更を処理するための私の好ましい方法です。カットアンドペーストと考えると、直感的な方法です。
マシューミッチェル

これは私には良いアプローチのようです。問題なく動作しました。
Yunus Nedim Mehel、2014年

あなたがこれを行うことができることを知りませんでした、そしてそれはうまく働きました。他の方法よりも少し直感的に感じます。
glaucon 2014

git checkoutを使用して追加するのではなく、より専門的な方法で隠しておくと思います。あなたの答えは100票以上にすべきだと思います。
Matrosov Alexander

1
@Καrτhικgit stash --include-untracked
2Toad

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.