您的当前位置:首页正文

为什么有时候git checkout不生效? git reset

来源:华佗小知识

遇到的问题

完成编码之后,我们通常要将代码提交到远程git仓库。

git stash
git pull
git stash pop

这个时候,git会自动merge当前改动,出现冲突的时候要修改,但是project文件的冲突通常比较讨厌。合并的的也会有问题。就想取消本地修改,重新拉远程版本。

git checkout  xxxx.proj

but, 这个时候却不起作用。尝试git add 进去再checkout,还是不行。
这个时候就要用到git reset、再git checout

git reset HEAD xxx.proj
git checkout xxx.proj

看看git reset、git checkout、git revert的区别

  • git reset:
    将分支或者文件指向另外一个提交
git reset HEAD file  // 将file文件的缓冲区和指定的commit(这里是HEAD)同步,改动移到工作区(默认是--mixed参数)
git reset --hard HEAD // 慎用,会将缓冲区和工作区都同步到HEAD,丢失当前修改

  • git checkout:
    当传入分支名时,可以切换到那个分支。传入commit、tag的时候,切换到对应commit、tag。传人文件名的时候,更改的是工作目录而不是缓存区(这里就是前面问题的关键了。)
git checkout HEAD~2 xxx.proj //将工作目录中的 foo.py 同步到了倒数第二个提交中的xxx.proj
  • git revert:
    针对commit的回滚操作
git reset HEAD // 将最后一个提交修改回滚,并产生一个新的提交来撤销修改。

参考