2017-06-15 22 views
0

申し訳ありません。この質問が無知であれば、私はGitを使い始めました。昨日私はmasterブランチを持つローカルリポジトリを作成し、次に 'firstbranch'という新しいブランチを作成しました。私は 'firstbranch'でいくつかの練習を行い、変更を追加/コミットしてからmasterブランチにマージします。どのアイデアです。 しかし、今日は中止したところを拾いましたが、今は「ファーストブランチ」を変更していますが、マージやコミットをせずにマスターに変更を加えています。私が間違っていることがあるのですか、これが起こるはずですか?私は仕事を廃止することを決めた場合にマスターを更新することなく、「firstbranch」に変更を加えることを明らかにしたいと思います。Git masterブランチが自動的に更新されます

+1

私はマスターをチェックアウトして、firstbranchに戻るのを忘れたと思います。 – eftshift0

+0

変更が 'master'ブランチにあることをどう知っていますか?特に何もコミットしなかったので? – axiac

+0

あなたは正しいブランチにいると確信していますか? 'git log --graph --oneline --decorate --all'を実行し、HEADがどこを指しているかを教えてください。 – Makoto

答えて

1

gitには、作業ツリー、インデックス、データベースという3つの異なるタイプのストレージがあります。これらの相互作用の仕組みを理解することは非常に重要です。

一般に、作業ツリーはファイルと直接対話する場所です(ファイルエクスプローラやIDEで表示される、テキストエディタで作業します)。作業ツリーの上部には通常、インデックスとデータベースを含む.git/ディレクトリがあります。インデックスは、変更がステージングされる場所です(git add)。データベースにはプロジェクトの履歴が格納されます(コミットと参照がどこにあるか)。

特に、ブランチ(refの一種)はデータベースに存在し、それ以外は存在しません。 (インデックスと作業ツリーは "ブランチにチェックアウト"することができますが、それはブランチ自体に関係するものよりも作業ツリーのステータスです)。

私が観察しなければならないと思うのは、 (コミットせずに)別のブランチをチェックアウトし、変更はまだ存在します。これは作業ツリー上にあるためです。彼らはまだどの支店にも属していません。一般的に、ブランチをチェックアウトするには、gitに変更を適用する必要があります。もし変更がローカルに変更されたファイルに影響するなら、チェックアウトは拒否されます。チェックアウトが許可されていると、作業ツリーの変更が反映されます。これは紛らわしいかもしれませんが、これはあなたの便宜のためのものです。

あなたが別のブランチをチェックアウトすることができるように「道のうち、」ローカルの作業中に取得したい場合は、正確にそれがデータベース内にあるとして、あなたはどちらか

(1)使用することができますあなたはまた、使用することができます(git stash popで)後でそれらを取得することができ、そこから一時的なコミットにローカルの変更を配置するgit stash、または

(2)独立したファイルシステムのパスに出

を他のブランチをチェックするgit worktreeを使用様々なオプティオnsにgit showgit diffを指定して、特定のブランチのヘッドコミット(特に)を調べます。私は、これらのコマンドのgitのドキュメントを見直すことをお勧めします。

+0

これは私があなたに感謝していたものでした! –

関連する問題