• Git-撤销(回退)已经add,commit或push的提交


    本文只阐述如何解决问题,不会对git的各种概念多做介绍,如果有兴趣可以点击下面的链接,进行详细的学习:
    Pro Git
    本文适用的环境

    现在先假设几个环境,本文将会给出相应的解决方法:
    1. 本地代码(或文件)已经add但是还未commit;
    2. 要回退的commit的代码已经commit了,但是还未push到远程个人repository
    3. 要回退的commit的代码已经push到远程的个人分支,但是还未merge到公共的repository
    4. 要回退的commit的代码已被merge(合入)到公共的repository
    关键的几个命令

    git reset [commit]
    git revert [commit]

    git reset有三个参数soft,mixed,hard分别对应head的指针移动,index(暂存区)、以及工作目录的修改,当缺省时,默认为mixed参数。
    git revert与reset的区别是git revert会生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留,也就是说对于项目的版本历史来说是往前走的。而git reset 则是回到某次提交,类似于穿越时空。
    相应的解决方法

    1、 对于上面的前两种情况,我们可以直接使用git reset命令。根据需要的不同使用,不同的参数。但是要注意

    git reset –hard 

    是一个危险的命令,他是git少数几个会销毁数据的命令之一,如果你不小心放了错,你也许可以使用

    git reflog

    命令来找回你的数据。
    2、 对于第三种情况,如果你的远程分支只有你一个人用的话,那么可以在先使用git reset [commit]回退,如何使用git push -f [commit]来强制更新你的远程库2

    3、 对于最后一种情况,考虑到其他人的版本历史,使用git reset [commit]是不建议的,此时我们应该使用git revert [commit]改命令不会修改之前的提交历史,相当于对数据做了一次逆操作,然后再执行add,commit等命令。
    总结

    对于前三种情况,虽然git revert也适用,但是如要要保持版本历史干净的话,建议还是用 git reset3,但是希望保留完整的历史的话,还是使用git revert为好。对于和其他人协同的项目,使用git rever是最好的。

  • 相关阅读:
    千万级规模高性能、高并发的网络架构经验分享
    CPU高问题排查
    Worker+MQ解惑
    HashMap解惑
    配置时间同步时,遇到同步无法成功的解决方法
    Django基础—— 1.WEB框架介绍
    html5兼容性问题
    jQuery基础——节点操作
    jQuery基础——基本操作
    jQuery基础——选择器
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/9945732.html
Copyright © 2020-2023  润新知