我正在探索如何使用 git。
我刚刚做了以下测试:
- 创建一个文件夹和2个文件
- 然后 git init, git add ., git commit -m "initial commit"
- 创建分支:git branch experimental、git checkout experimental
- 然后更改文件夹名称并删除其中一个文件,然后 git add ., git commit -m "experimental"
回到master:git checkout master
惊讶:我没有找到我离开时的 master;该文件夹已消失。我必须执行 git -reset --hard 才能找到我的文件夹。
不知是我哪里做错了还是没理解git是如何管理本地变化的。感谢您的帮助。
详细场景:
mkdir GitTest
cd GitTest/
mkdir Folder1
echo "master" > Folder1/File1.txt
echo "master" > File2.txt
git init
git add .
git commit -m "init"
git branch expe
git checkout expe
mv File2.txt File3.txt
mv Folder1/ Folder1-exp/
echo "expe" >> Folder1-exp/File1.txt
git add .
git commit -m "expe"
git checkout master
ls
git checkout expe
ls
最佳答案
那是因为 difference between git add .
and git add -A
.
只有 git add -A 会记录新文件和已删除的文件。
当你执行第二个 git add .
时,这里是 git status
必须说的:
C:\HOMEWARE\git\tests\p2>git status
# On branch exp
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: f2/f1b.txt
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: f1/f1a.txt
# deleted: f1/f1b.txt
#
工作树删除了第一个目录。
所以当你切换回 master 时,那个工作树被保留了下来:
C:\HOMEWARE\git\tests\p2>git checkout master
D f1/f1a.txt
D f1/f1b.txt
Switched to branch 'master'
因此 'f1
' 消失了......
关于git 和本地修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3003301/