用rm file.txt
删除的只是工作区的,如果没有手动git add file.txt
,就没有将删除操作添加到暂存区。现在直接git commit
的话,新生成的版本库里面还是有file.txt
的,可用git checkout -- file.txt
恢复,而用git rm file.txt
删除的自动将删除操作add
到了暂存区。这时候如果git commit
,新生成的那个版本库,里面就没有了file.txt
。只能用版本id
号恢复,即git reset --hard id
号
在任何分支的工作区修改后,不commit
可以切换到其他分支包括master
,也可以再切回去。
这就证明,未commit
的工作区文件和stage
文件是可以灵活地在且仅在任一branch
存在的。这是前提。
- 在工作区做了修改,提交到
DEV
的分支,再切换回master
——
这时候,对master
来说,工作区没有任何未提交的修正(因为所有修正都已经commit
)。则工作区内容应该是与master
分支最后一次提交的内容一致。(处于任何其他时间点,都意味着工作区可能存在修正,这就出现了矛盾) - 在工作区做了修改,没有提交到
DEV
分支,即切换回master
——
这个时候,对master
来说,工作区有了修正,那么就保持工作区的现有状态即可。
pull
:本地 <-- 远程
push
:本地 --> 远程
本质上都是同步commit
如果你本地落后远程,必然要pull
如果你本地超前远程,必然要push
git add test.txt
git commit -m 'add test.txt'
rm test.txt 误删了
git checkout -- test.txt 恢复了
然而
git rm test.txt 用git命令删除一个文件
git commit -m 'remove test.txt' 并且确认了这个删除
git checkout -- test.txt 再用这个命令试图恢复是会报错
但是,
可以用下面的命令去某一个git commit之后的版本
git log --pretty=oneline 看看目前都有哪些版本? 坐时光机回去
git reset --hard HEAD^ 回到上一个版本
网友评论