为什么有时候git checkout不生效? git reset
2017-12-06 本文已影响14人
link_hui
遇到的问题
完成编码之后,我们通常要将代码提交到远程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 // 将最后一个提交修改回滚,并产生一个新的提交来撤销修改。