场景概念说明

首先说明一个概念, 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

欢迎批评与指正。

最新文章

  1. 结对项目:代码复审+PSP
  2. 一个请求在Struts2框架中的处理流程
  3. 误差曲线(Matlab)
  4. SQL总结(二)连表查询
  5. HDU2243_考研路茫茫――单词情结
  6. 阿牛的EOF牛肉串[HDU2047]
  7. linux-制作linux启动U盘
  8. IIS Server Farms集群负载
  9. 【JavaScript】设计模式-module模式及其改进
  10. 设备树的interrupt
  11. oracle获取表字段属性
  12. Spring WebFlux 响应式编程学习笔记(一)
  13. VS 2015 GIT操作使用说明
  14. 游记-WC2019
  15. 基于FPGA的序列检测器10010
  16. [CentOS_7.4]Linux编译安装ffmpeg
  17. MySQL普通用户无法本地登录的解决方法及MySQL的用户认证算法
  18. VMware激活密钥
  19. 《剑指offer》第三十题(包含min函数的栈)
  20. CentOS配置163yum源

热门文章

  1. Linux实战型企业运维工程师试题
  2. Rails.cache相关知识
  3. LR编写Socket脚本方法2(从文件读取报文)
  4. Sqoop 简介与安装
  5. 【过时】项目转Maven后出现的问题记录
  6. 第一个SpringBoot
  7. HDU 5723:Abandoned country(最小生成树+算期望)
  8. django基础知识之上传图片:
  9. django基础知识之模板:
  10. web前端兼容性问题总结