• git 必看,各种撤销操作


    场景概念说明

    首先说明一个概念, git是一个分布式的版本控制工具,分布式即 git 管理的项目是有多个大致平等的仓库的。通过一个例子来说明这个东西。

    举一个最简单的使用场景: 你在github 建立了一个项目, 然后把已经初始化的项目拉到了本地(或者从本地push了内容到github)。 即: 此时github 和你本地都有了项目,且二者,已经建立了联系。

    此时这一个项目既有了两个仓库,一个在github 的远端仓库,一个在本地的本地仓库。 如果是两人合作,则会有两个本地仓库。 虽然主观上,把github上的仓库视为主仓库,但是我们可以通过一些操作,把任一仓库变更为新的主仓库。 即: 这些仓库的地位没有实质上的差别。可以做如下转换

    仓库关系转换

    不熟练就先备份

    不熟练的话,做感觉有危险的操作前,先备份。

    可以使用 git stash,备份当前的修改,想要恢复的时候,直接使用 检出即可。 或者干脆 git checkout -b newBranch, 备份一个新分支。 备份 不是今天的主要话题,就不展开讲了。

    撤销操作--仅变动本地的代码

    取消文件的修改

    git checkout fileName, 这个命令会从本地仓库里检出文件,覆盖掉 指定文件的修改。 本地仓库 即已经commit 提交到本地仓库的代码。把指定的文件名换成‘ . ’ 即为选择全部的意思。

    取消 git add 操作

    git reset --mixed 仅取消 git add 带来的效果。 即本地的修改还在,但是取消了add 的状态。

    回退到指定到 commit号

    git reset --hard commitId, 这个命令 回退到指定的commit,并且不会保留本地尚未提交的修改。所以一定要慎重使用。

    取消commit时,更安全的操作: revert

    更安全的操作, 使用 git revert

    git revert commitId,会撤销指定的commit,但是与 reset --hard 不同的是,revert 不会丢掉被撤销的commit,而是会生成一个新的commit,其所有操作与指定的commit 相反,以此来覆盖掉该commit 的修改。

    举个栗子: 按序有三个commit: c1, c2, c3。 现在我们位于c3. 使用 git commit --hard c2, 则当前状态会退回到 c2, git log, 只会看到,c2、c1. 而 如果使用git revert c2,则会新添加一个c4的commit,c4的操作与c2 完全相反。 git log 可以看到 1 ~ 4 全部的commit。

    如果你想撤销远端的代码呢

    如果使用了revert,直接 git push 即可。

    如果使用的是git reset,或者 rebase到了之前的commit; 在更改了本地代码以后,git push -f。

    -f 一定慎用,如果涉及到远端主分支,干脆就不要用。
    涉及远端的,还是推荐用 revert

    欢迎批评与指正。

  • 相关阅读:
    MysqlServer如何实现成功卸载,并成功安装
    win7安装xampp,提示windows找不到-n文件(安装成功后,443端口占用,apache服务器无法正常启动)
    (JS实现顾客商品浏览记录以及购物车)Cookie的保存与删除
    (转)SVN 服务端、客户端安装及配置、导入导出项目
    正则表达式详解
    Struts2.3.4+Hibernate4.2.4+Mysql6.0整合
    CSS中TRBL和position关系
    const typedef #define
    数组的替代品
    输入
  • 原文地址:https://www.cnblogs.com/mingbai/p/gitcancle.html
Copyright © 2020-2023  润新知