博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git 必看,各种撤销操作
阅读量:4578 次
发布时间:2019-06-08

本文共 1314 字,大约阅读时间需要 4 分钟。

场景概念说明

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

欢迎批评与指正。

转载于:https://www.cnblogs.com/mingbai/p/gitcancle.html

你可能感兴趣的文章
SharedPreferences
查看>>
java中使用session的一些细节
查看>>
浏览器输入服务器端口号来访问html网页
查看>>
hdu 6435 CSGO(最大曼哈顿距离)
查看>>
logback框架之——日志分割所带来的潜在问题
查看>>
链路追踪工具之Zipkin学习小记
查看>>
iOS中通讯录的开发
查看>>
怎么让table中的<td>内容向上对齐
查看>>
[Java] 遍历HashMap和HashMap转换成List的两种方式
查看>>
mongodb
查看>>
LeetCode 46. Permutations
查看>>
jmeter- 性能测试3:聚合报告(Aggregate Report )
查看>>
JavaScript高级程序设计---学习笔记(二)
查看>>
vim 插件的学习
查看>>
Uncaught SyntaxError: Unexpected token ILLEGAL
查看>>
一个预处理定义的问题
查看>>
ANDROID L——Material Design综合应用(Demo)
查看>>
自我介绍以及关于软件工程的问题
查看>>
struts (一)
查看>>
【新番推荐】工作细胞
查看>>