zoukankan      html  css  js  c++  java
  • 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

    欢迎批评与指正。

  • 相关阅读:
    Ocelot一款.NET下的API网关介绍
    【Core】.NET Core 部署( Docker + CentOS)
    VS2019添加git源代码管理
    sql两个表组合到一起,字符串拼接后放在最后一列上
    sqlserver取随机数随机取数
    delphi时间戳(10位)
    消息 7356,级别 16,状态 1,第 1 行 链接服务器 "downloadschoolcardinfo" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 为列提供的元数据不一致。对象 ""VIEW_ZJK"."V_QDXQHIS_RYXX"" 的列 "XZZ" (编译时序号为 9)在编译时有 1 的 "LENGTH",但在运行时有 2。
    sqlserver简单的组合串
    Delphi提示:List Index out Of bounds(5)
    SQLserver简单的竖向转横向
  • 原文地址:https://www.cnblogs.com/mingbai/p/gitcancle.html
Copyright © 2011-2022 走看看