zoukankan      html  css  js  c++  java
  • 如何高效撤销Git管理的文件在各种状态下的更改

    一、背景

      企业中我们一般采用分布式版本管理工具git来进行版本管理,在团队协作的过程中,我们难免会遇到误操作,需要撤销更改的情况,那么我们怎么高效的进行撤销修改呢?对于还未提交到暂存区的代码怎么高效撤销更改呢?对于已经提交到暂存区的代码,怎么取消add操作?对于已经提交到本地仓库,还没有提交到远程仓库的代码,怎么进行高效撤销更改呢?还有对于已经提交到远程仓库的代码,如何进行高效的撤销更改呢?那我们本文就来一一解决这些棘手的问题!

    二、各种状态高效撤销方案

    1. 文件还未提交到暂存区,只是在工作目录中修改了,想要撤销

      git checkout [--] file-name (撤销单个文件修改)
      git checkout [--] . (撤销当前工作空间中所有文件的修改)
    2. 文件已经add到暂存区,但还没有提交到本地仓库,想要撤销(即取消add操作)
      git reset [HEAD] file-name (撤销暂存区中的单个文件)
      git reset [HEAD] . (撤销当前暂存区中的所有内容)
    3. 文件已经提交到本地仓库,但还没有push到远程仓库,想要撤销

      git log (查看并记录下要回滚到的commitId)
      git reset [--soft | --mixed |--hard] commitId (回退版本)

        注:git reset 默认是 --mixed 模式,即 git reset --mixed 等价于 git reset.

          --soft : 会保留工作区间以及暂存区index的提交,只是把git commit回退到某个版本,如还需提交,直接commit即可。

          --mixed : 会在工作区保留源码,只是将git commit和暂存区index回退到某个版本。

          --hard : 源码以及暂存区和git commit都回退到某个版本。

    4. 文件已经提交到远程仓库,想要撤销

      git log (查看并记录下要回滚到的commitId)
      git reset --hard commitId (回退版本)
      git push -f origin branch-name


      git revert commitId(回退版本)
      git push origin branch-name

       注: reset和revert有着本质的区别,reset直接删除了指定的commit,而revert是用一次新的commit来覆盖要回滚的commit.

          reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

            如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.  

    三、总结

      通过本文我们就知道如何对不同状态的git管理的文件进行撤销修改的操作,这样即使我们不小心操作了什么东西,我们也能很快的进行回滚,就是要做高效的程序猿~

  • 相关阅读:
    scapy学习笔记(4)简单的sniffing 嗅探
    scapy学习笔记(3)发送包,SYN及TCP traceroute 扫描
    Linux查看CPU和内存使用情况
    MySQL关于根据日期查询数据的sql语句
    JSON 数据格式
    利用PyCharm进行Python远程调试
    pycharm远程调试配置
    Linux终端使用技巧
    每天一个linux命令(60):scp命令
    python-docx 使用教程
  • 原文地址:https://www.cnblogs.com/hafiz/p/8145060.html
Copyright © 2011-2022 走看看