Git で、私には不合理に思える状況に直面しました。たくさんのコミットがあるリポジトリがあり、この段階ではブランチは 1 つしかありません (マスター)。
このブランチに次のようなファイルがあるとしますマイファイル.txtここで、いくつかのファイルに変更を加えたいのですが、マスター ブランチを直接変更したくないので、別のブランチを作成する必要があります。そこで、次のコマンドを実行します。
git checkout iss53
スキーマは次のようになります。
わかりました。ブランチに切り替えましたiss53 さん、私は走りls -l
、マイファイル.txt変更点の1つは、マイファイル.txtファイルなので、次のようになります。
git rm MyFile.txt
いいですね、ls -l
もう一度走ってみると、マイファイル.txtもうこれ以上は無理だ。だから私はマスター支店:
git checkout master
しかしマイファイル.txtファイルも消えてしまいました。私の論理では、ブランチ上のファイルを削除した場合、それが適用されるはずですのみそのブランチにファイルが削除されたのはなぜですか?マスターブランチも作成しますか? まだコミットは行っておらず、ブランチ作成のみであることに注意してください。
注記: どちらの画像もGit-scm。
答え1
答えはあなたの質問の中にあります:
まだコミットは行っておらず、ブランチ作成のみであることに注意してください。
コミットしない場合、変更は常に作業ディレクトリに保存されます。ブランチを切り替えても作業ディレクトリには影響しません。また、作業ディレクトリも最後のコミットには影響しません。ファイルが削除されたように見えますが、実際には作業ディレクトリからのみ削除されます。変更をクリアして最後のコミットに戻りたい場合は、次のコマンドを使用します。
git reset --hard HEAD
したがって、ファイルは再度復元されます。
おそらく、これはあなたにとって論理的ではないかもしれませんが、この動作は役に立つことがあります。master
との 2 つのブランチがあり、変更を に移動する前にdevelopment
常に で作業する必要があると想像してください。作業を開始する前に に切り替えるのを忘れ、コミットする前に にいることに気付いたとします。解決方法は簡単で、 に切り替えてからコミットするだけです。development
master
development
master
development
答え2
ブランチの 1 つ (login と呼びます) からファイルを削除しても、マスター ブランチからは削除されませんでした。
- ログインブランチに切り替えました
git checkout login
- test.htmlファイルを削除しました
git rm --cached test.html
- ステージングエリアにすべてを追加しました
git add .
- 変更をコミットしました
git commit -m 'removed test.html file'
- ローカルリポジトリをGithubのリモートリポジトリにプッシュしました
git push