这是什么呢,算是使用总结吧。(#^.^#),算总结。
git checkout -- file
当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
如下所示:我修改了main.c,要恢复到修改之前的状态
- csdn@ubuntu:~/git_learn/mygit$ vi main.c
- csdn@ubuntu:~/git_learn/mygit$ git status
- 位于分支 master
- 您的分支领先 'origin/master' 共 5 个提交。
- (使用 "git push" 来发布您的本地提交)
- 尚未暂存以备提交的变更:
- (使用 "git add <文件>..." 更新要提交的内容)
- (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
-
- 修改: main.c
-
- 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
- csdn@ubuntu:~/git_learn/mygit$
执行如下命令:
- csdn@ubuntu:~/git_learn/mygit$ git checkout -- main.c
- csdn@ubuntu:~/git_learn/mygit$ git status
- 位于分支 master
- 您的分支领先 'origin/master' 共 5 个提交。
- (使用 "git push" 来发布您的本地提交)
- 无文件要提交,干净的工作区
- csdn@ubuntu:~/git_learn/mygit$
问题描述
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,
分两步,第一步用命令git reset HEAD
验证:
先修改文件,如下所示,经过vi修改,git add main.c,该文件到了暂存区了。
- csdn@ubuntu:~/git_learn/mygit$ vi main.c
- csdn@ubuntu:~/git_learn/mygit$ git status
- 位于分支 master
- 您的分支领先 'origin/master' 共 5 个提交。
- (使用 "git push" 来发布您的本地提交)
- 尚未暂存以备提交的变更:
- (使用 "git add <文件>..." 更新要提交的内容)
- (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
-
- 修改: main.c
-
- 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
- csdn@ubuntu:~/git_learn/mygit$ git add main.c
- csdn@ubuntu:~/git_learn/mygit$ git status
- 位于分支 master
- 您的分支领先 'origin/master' 共 5 个提交。
- (使用 "git push" 来发布您的本地提交)
- 要提交的变更:
- (使用 "git reset HEAD <文件>..." 以取消暂存)
-
- 修改: main.c
-
- csdn@ubuntu:~/git_learn/mygit$
根据提示,执行git reset HEAD main.c取消暂存。如下所示:
- csdn@ubuntu:~/git_learn/mygit$ git reset HEAD main.c
- 重置后取消暂存的变更:
- M main.c
- csdn@ubuntu:~/git_learn/mygit$ git status
- 位于分支 master
- 您的分支领先 'origin/master' 共 5 个提交。
- (使用 "git push" 来发布您的本地提交)
- 尚未暂存以备提交的变更:
- (使用 "git add <文件>..." 更新要提交的内容)
- (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
-
- 修改: main.c
-
- 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
- csdn@ubuntu:~/git_learn/mygit$
执行完上面的步骤后,main.c文件的状态变为刚刚修改的了。同样,根据提示(好像根据不需要思考啊),git checkout -- main.c,如下所示:工作区又干净了。
- csdn@ubuntu:~/git_learn/mygit$ git checkout -- main.c
- csdn@ubuntu:~/git_learn/mygit$ git status
- 位于分支 master
- 您的分支领先 'origin/master' 共 5 个提交。
- (使用 "git push" 来发布您的本地提交)
- 无文件要提交,干净的工作区
- csdn@ubuntu:~/git_learn/mygit$
已经提交了不合适的修改到版本库时,想要撤销本次提交,可以用命令git reset --hard commit_id,不过前提是没有推送到远程库
1 首先修改readme.txt文件
- csdn@ubuntu:~/git_learn/mygit$ vi readme.txt
- csdn@ubuntu:~/git_learn/mygit$ git status -s
- M readme.txt
- csdn@ubuntu:~/git_learn/mygit$
2 然后,使用git log --oneline | head -n 3查看最近三次的提交信息:
- csdn@ubuntu:~/git_learn/mygit$ git log --oneline | head -n 3
- d7f47bb modify main.c for test
- 993aeb8 add kexi.txt for test branch kexi
- f6dcbf1 Merge remote-tracking branch 'origin/master'
- csdn@ubuntu:~/git_learn/mygit$
3 然后,使用git commit -am "modify readme.txt for csdn log"提交修改到本地版本库。
- csdn@ubuntu:~/git_learn/mygit$ git commit -am "modify readme.txt for csdn log"
- [master cebea0d] modify readme.txt for csdn log
- 1 file changed, 1 insertion(+)
- csdn@ubuntu:~/git_learn/mygit$
4 重复第二步:
- csdn@ubuntu:~/git_learn/mygit$ git log --oneline | head -n 3
- cebea0d modify readme.txt for csdn log
- d7f47bb modify main.c for test
- 993aeb8 add kexi.txt for test branch kexi
- csdn@ubuntu:~/git_learn/mygit$
5 执行git reset --hard commit_id
commit_id是cebea0d :执行完了以后,如下所示:
- csdn@ubuntu:~/git_learn/mygit$ git reset --hard cebea0d
- HEAD 现在位于 cebea0d modify readme.txt for csdn log
- csdn@ubuntu:~/git_learn/mygit$
6 然后再重复第二步,结果没变啊,这是什么情况啊?readme.txt也没恢复啊
- csdn@ubuntu:~/git_learn/mygit$ git log --oneline | head -n 3
- cebea0d modify readme.txt for csdn log
- d7f47bb modify main.c for test
- 993aeb8 add kexi.txt for test branch kexi
- csdn@ubuntu:~/git_learn/mygit$
7 难道是要输出前一个id
- csdn@ubuntu:~/git_learn/mygit$ git reset --hard d7f47bb
- HEAD 现在位于 d7f47bb modify main.c for test
- csdn@ubuntu:~/git_learn/mygit$
8 再次查看log信息:真的恢复了,readme.txt文件也回到了之前的状态。
- csdn@ubuntu:~/git_learn/mygit$ git log --oneline | head -n 3
- d7f47bb modify main.c for test
- 993aeb8 add kexi.txt for test branch kexi
- f6dcbf1 Merge remote-tracking branch 'origin/master'
- csdn@ubuntu:~/git_learn/mygit$