Git のブランチ内のファイルを削除すると、マスター ブランチからもファイルが削除されることになりますか?

Git のブランチ内のファイルを削除すると、マスター ブランチからもファイルが削除されることになりますか?

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常に で作業する必要があると想像してください。作業を開始する前に に切り替えるのを忘れ、コミットする前に にいることに気付いたとします。解決方法は簡単で、 に切り替えてからコミットするだけです。developmentmasterdevelopmentmasterdevelopment

答え2

ブランチの 1 つ (login と呼びます) からファイルを削除しても、マスター ブランチからは削除されませんでした。

  1. ログインブランチに切り替えましたgit checkout login
  2. test.htmlファイルを削除しましたgit rm --cached test.html
  3. ステージングエリアにすべてを追加しましたgit add .
  4. 変更をコミットしましたgit commit -m 'removed test.html file'
  5. ローカルリポジトリをGithubのリモートリポジトリにプッシュしましたgit push

関連情報