2017-08-15 10 views
0

私のマスターブランチでいくつかの変更を行い、コミットせずに開発ブランチにチェックアウトしました。エラーがスローされることを期待していましたが、その代わりに、マスターブランチの変更が開発ブランチとマージされました。これに代えてgit:ブランチを切り替えると私のコミットされていない変更が実行されてマージされる

$ git checkout development 
Switched to branch 'development' 
M  pom.xml 
Your branch is up-to-date with 'origin/development'. 

私がチェックアウトする前に、私の変更を隠しておくか、コミットすることができるように、私は、以下のエラーを期待していた。それが起こったか、どのように私はそれを防ぐことができる理由

error: You have local changes ....; cannot switch branches. 

誰もが知っています再び起こります?

+0

もっと正確に言えば、最初の手での私のチェックアウトコマンドは間違いでした。私はそれをしてはいけません。だから、私はエラーが投げられることを期待していた。これはgitのデフォルトの動作ですか? – leventunver

+0

はい、AFAIK gitのデフォルトの動作です。 –

+1

作業ツリーの変更は、コミットしない限り、ブランチの一部ではありません。別のブランチをチェックアウトするとき、Gitは新しいブランチの影響を受けるファイルの内容と矛盾がなければ、それらを保存します。 – axiac

答えて

2

私が知る限り、これはGitのデフォルトの動作です。ブランチを切り替えるときは、作業ディレクトリを持ち歩きます。私はまた、これがではなかった以前のバージョンを思い出すようです。ケース。

これを回避することはできませんが、ブランチを切り替える前に作業ディレクトリ(およびステージ)がきれいであることを常に確認することができます。あるいは、あなたは自分の仕事をしたり、隠したりすることができます。

+1

...それがデフォルトの振る舞いである理由は、 'git'はブランチを切り替えただけで作業を失いたくないと仮定しているからです。例えば、 'master'でファイルを編集し始めたら、まずはフィーチャーブランチを開いたはずです。 – larsks

+0

...これはロールバックが非常に簡単です。ちょうど 'checkout 'です。 – instantepiphany

+0

@larsksだからこそ、私はエラーを期待していた。このようにして、作業を失うことはありませんが、コミットまたは隠しによって何らかのアクションを取らない限り、ブランチを切り替えることはできません。それが私がティムのように覚えている方法です。 axianのコメントも意味があります。なぜなら、作業ツリーはどこにも属していないので、それは問題ではありません。私は自分のマスターブランチに戻って、いつでも私が望むことができる。 – leventunver

関連する問題