Git サーバーからレポをクローンし、追跡されたブランチをチェックアウトし、続いて git ステータスをチェックアウトします。git は、ファイルが削除されたことを示します。リポジトリでは作業は行われず、次の順序で git コマンドのみが実行されました。
git clone <myrepo>
git branch - indicates on master branch
git status - reports working directory is clean
git checkout <release-branch>
git status - shows a file has been deleted
失敗するls <file>
と、ファイルが実際に削除されたことを示します。gitk は、ローカルのコミットされていない変更を示す赤いノードを示していますが、リポジトリには変更が加えられておらず、ブランチへのチェックアウトのみです。gitk でツリーを見ると、親コミットにはファイルがあります。
git checkout -- <file>
ファイルを戻します。
ただし、同じリポジトリを複製してブランチを含め、ステータスを実行すると、ファイルが存在します。
git clone -b <release-branch> <myrepo>
git status - reports working directory is clean
ls <file> - shows file exists
これは、異なるシステムの複数の異なる人々によって繰り返されます。
ブランチを変更すると、このファイルが削除されるのはなぜですか?
完全なコマンド ライン シーケンスと出力は次のとおりです (無実を保護するために名前が変更されています)。
$ rm -rf test-*
$ git clone <repo> test-master
Cloning into 'test-master'...
remote: Counting objects: 11478, done.
remote: Compressing objects: 100% (5918/5918), done.
remote: Total 11478 (delta 7856), reused 8429 (delta 5558)
Receiving objects: 100% (11478/11478), 7.48 MiB | 183 KiB/s, done.
Resolving deltas: 100% (7856/7856), done.
$ cd test-master
$ git branch
* master
$ git status
# On branch master
nothing to commit (working directory clean)
$ git checkout relbranch
Checking out files: 100% (112/112), done.
Branch relbranch set up to track remote branch relbranch from origin.
Switched to a new branch 'relbranch'
$ git status
# On branch relbranch
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: prtbatt.c
#
no changes added to commit (use "git add" and/or "git commit -a")
$ cd ..
$ git clone -b relbranch <repo> test-relbranch
Cloning into 'test-relbranch'...
remote: Counting objects: 11478, done.
remote: Compressing objects: 100% (5918/5918), done.
remote: Total 11478 (delta 7856), reused 8429 (delta 5558)
Receiving objects: 100% (11478/11478), 7.48 MiB | 178 KiB/s, done.
Resolving deltas: 100% (7856/7856), done.
$ cd test-relbranch
$ git branch
* relbranch
$ git status
# On branch relbranch
nothing to commit (working directory clean)