• git实用技巧:把我的文件内容改回去


    前言

    这是什么呢,算是使用总结吧。(#^.^#),算总结。

    一 取消文件的修改

    git checkout -- file

    当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

    如下所示:我修改了main.c,要恢复到修改之前的状态

    1. csdn@ubuntu:~/git_learn/mygit$ vi main.c
    2. csdn@ubuntu:~/git_learn/mygit$ git status
    3. 位于分支 master
    4. 您的分支领先 'origin/master' 共 5 个提交。
    5. (使用 "git push" 来发布您的本地提交)
    6. 尚未暂存以备提交的变更:
    7. (使用 "git add <文件>..." 更新要提交的内容)
    8. (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    9. 修改: main.c
    10. 修改尚未加入提交(使用 "git add" 和/或 "git commit -a"
    11. csdn@ubuntu:~/git_learn/mygit$

    执行如下命令:

    1. csdn@ubuntu:~/git_learn/mygit$ git checkout -- main.c
    2. csdn@ubuntu:~/git_learn/mygit$ git status
    3. 位于分支 master
    4. 您的分支领先 'origin/master' 共 5 个提交。
    5. (使用 "git push" 来发布您的本地提交)
    6. 无文件要提交,干净的工作区
    7. csdn@ubuntu:~/git_learn/mygit$

    二 取消已经走到暂存区的文件的修改

    问题描述

    当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,

    分两步,第一步用命令git reset HEAD ,然后想直接丢弃工作区的修改时,用命令git checkout -- file

    验证:

    先修改文件,如下所示,经过vi修改,git add main.c,该文件到了暂存区了。

    1. csdn@ubuntu:~/git_learn/mygit$ vi main.c
    2. csdn@ubuntu:~/git_learn/mygit$ git status
    3. 位于分支 master
    4. 您的分支领先 'origin/master' 共 5 个提交。
    5. (使用 "git push" 来发布您的本地提交)
    6. 尚未暂存以备提交的变更:
    7. (使用 "git add <文件>..." 更新要提交的内容)
    8. (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    9. 修改: main.c
    10. 修改尚未加入提交(使用 "git add" 和/或 "git commit -a"
    11. csdn@ubuntu:~/git_learn/mygit$ git add main.c
    12. csdn@ubuntu:~/git_learn/mygit$ git status
    13. 位于分支 master
    14. 您的分支领先 'origin/master' 共 5 个提交。
    15. (使用 "git push" 来发布您的本地提交)
    16. 要提交的变更:
    17. (使用 "git reset HEAD <文件>..." 以取消暂存)
    18. 修改: main.c
    19. csdn@ubuntu:~/git_learn/mygit$

    根据提示,执行git reset HEAD main.c取消暂存。如下所示:

    1. csdn@ubuntu:~/git_learn/mygit$ git reset HEAD main.c
    2. 重置后取消暂存的变更:
    3. M main.c
    4. csdn@ubuntu:~/git_learn/mygit$ git status
    5. 位于分支 master
    6. 您的分支领先 'origin/master' 共 5 个提交。
    7. (使用 "git push" 来发布您的本地提交)
    8. 尚未暂存以备提交的变更:
    9. (使用 "git add <文件>..." 更新要提交的内容)
    10. (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    11. 修改: main.c
    12. 修改尚未加入提交(使用 "git add" 和/或 "git commit -a"
    13. csdn@ubuntu:~/git_learn/mygit$

    执行完上面的步骤后,main.c文件的状态变为刚刚修改的了。同样,根据提示(好像根据不需要思考啊),git checkout -- main.c,如下所示:工作区又干净了。

    1. csdn@ubuntu:~/git_learn/mygit$ git checkout -- main.c
    2. csdn@ubuntu:~/git_learn/mygit$ git status
    3. 位于分支 master
    4. 您的分支领先 'origin/master' 共 5 个提交。
    5. (使用 "git push" 来发布您的本地提交)
    6. 无文件要提交,干净的工作区
    7. csdn@ubuntu:~/git_learn/mygit$

    三 恢复已经提交到本地版本库的文件

    已经提交了不合适的修改到版本库时,想要撤销本次提交,可以用命令git reset --hard commit_id,不过前提是没有推送到远程库

    1 首先修改readme.txt文件

    1. csdn@ubuntu:~/git_learn/mygit$ vi readme.txt
    2. csdn@ubuntu:~/git_learn/mygit$ git status -s
    3. M readme.txt
    4. csdn@ubuntu:~/git_learn/mygit$

    2 然后,使用git log --oneline | head -n 3查看最近三次的提交信息:

    1. csdn@ubuntu:~/git_learn/mygit$ git log --oneline | head -n 3
    2. d7f47bb modify main.c for test
    3. 993aeb8 add kexi.txt for test branch kexi
    4. f6dcbf1 Merge remote-tracking branch 'origin/master'
    5. csdn@ubuntu:~/git_learn/mygit$

    3 然后,使用git commit -am "modify readme.txt for csdn log"提交修改到本地版本库。

    1. csdn@ubuntu:~/git_learn/mygit$ git commit -am "modify readme.txt for csdn log"
    2. [master cebea0d] modify readme.txt for csdn log
    3. 1 file changed, 1 insertion(+)
    4. csdn@ubuntu:~/git_learn/mygit$

    4 重复第二步:

    1. csdn@ubuntu:~/git_learn/mygit$ git log --oneline | head -n 3
    2. cebea0d modify readme.txt for csdn log
    3. d7f47bb modify main.c for test
    4. 993aeb8 add kexi.txt for test branch kexi
    5. csdn@ubuntu:~/git_learn/mygit$

    5 执行git reset --hard commit_id

    commit_id是cebea0d :执行完了以后,如下所示:

    1. csdn@ubuntu:~/git_learn/mygit$ git reset --hard cebea0d
    2. HEAD 现在位于 cebea0d modify readme.txt for csdn log
    3. csdn@ubuntu:~/git_learn/mygit$

    6 然后再重复第二步,结果没变啊,这是什么情况啊?readme.txt也没恢复啊

    1. csdn@ubuntu:~/git_learn/mygit$ git log --oneline | head -n 3
    2. cebea0d modify readme.txt for csdn log
    3. d7f47bb modify main.c for test
    4. 993aeb8 add kexi.txt for test branch kexi
    5. csdn@ubuntu:~/git_learn/mygit$

    7 难道是要输出前一个id

    1. csdn@ubuntu:~/git_learn/mygit$ git reset --hard d7f47bb
    2. HEAD 现在位于 d7f47bb modify main.c for test
    3. csdn@ubuntu:~/git_learn/mygit$

    8 再次查看log信息:真的恢复了,readme.txt文件也回到了之前的状态。

    1. csdn@ubuntu:~/git_learn/mygit$ git log --oneline | head -n 3
    2. d7f47bb modify main.c for test
    3. 993aeb8 add kexi.txt for test branch kexi
    4. f6dcbf1 Merge remote-tracking branch 'origin/master'
    5. csdn@ubuntu:~/git_learn/mygit$

    小结

  • 相关阅读:
    凉鞋的 Godot 笔记 001. 概述
    Vim实用技巧_0.vim - introduction
    5.5G移动通信技术
    3.1. 数学函数
    《WEB安全渗透测试》(29)记一次HOST头投毒漏洞
    vue路由传参刷新丢失
    jar包导入到本地仓库无法引用
    如何用stable diffusion画出这种风景幻视画?
    zabbix配置钉钉告警(附含钉钉告警脚本 · 实战亲测无任何问题)
    分布式系统的主键生成方案对比
  • 原文地址:https://blog.csdn.net/yueni_zhao/article/details/128106203