git 和本地修改

标签 git

我正在探索如何使用 git。

我刚刚做了以下测试:

  1. 创建一个文件夹和2个文件
  2. 然后 git init, git add ., git commit -m "initial commit"
  3. 创建分支:git branch experimental、git checkout experimental
  4. 然后更改文件夹名称并删除其中一个文件,然后 git add ., git commit -m "experimental"
  5. 回到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/

相关文章:

git - Google Compute Engine VM,添加的负载均衡器现在不能 git pull

git - 在 Jenkins 构建失败之前 merge ,但不应该

python-3.x - 如何在 git push 上进行 VPS 自动更新

git - 为什么 git 会找到我的主目录中不存在的目录?

git - 如何在 rebase 期间快速标记有冲突的决议?

css - 使用 SASS 的 Foundation 5 元素设置

ruby-on-rails - 每次推送到 heroku 时都需要重置数据库吗?

linux - CRON bash 执行结果不同于手动启动

Git:克隆时显示消息

TFS 中的 Git 提交策略