git版本回退 2020-03-04(未经允许,禁止转载)

Undo Commits

git的回退(Undo),通过git reset and git revert实现

git reset

作为版本控制系统,git拥有【回到过去】和【重返未来】的能力,使用的命令也相当相当简单,就是一句git reset

git reset命令可以实现在不同版本间穿梭跳越,分为 git reset --hard 和 git reset --soft

  • git reset --hard commit_id
    回退至commit_id指定的版本,回退时修改版本库+修改暂存区+修改工作区——全回退
  • git reset --soft commit_id
    回退至commit_id指定的版本,回退时修改版本库,但保留暂存区+保留工作区——仅版本库回退

git revert

git revert commit_id

git revert will create a new commit that will undo all of the work that was done in the commit you want to revert.

To undo commits that have already been pushed and shared with the team, we cannot use the git reset command. Instead, we have to use git revert.

当某些commit已经push到远端中央仓库并且被整个开发团队共享后(比如合并入master),要想取消这些commit,我们就不能用git reset。为什么?
因为这些commit一旦push到远端中央仓库并合入master,别人就可能git pull拉到自己的本地仓库。假设:

  • A push了一些commit并且合入origin/master
  • 然后B通过git pull把origin/master拉下来并与本地master合并,然后在此基础上checkout新分支dev进行开发
  • A发现之前的commit有bug,使用git reset取消这些commit并且git push --force强制覆盖远端master
  • B的dev开发完毕,git push到远端中央仓库

这时,A 取消掉的commit会被B再次push上去,既不能真正实现undo的目的,也会让团队成员产生confuse

小结1:git reset就像抹杀历史;而git revert是在认可历史的基础上“拨乱反正”

小结2:不要去修改已被共享的代码的历史

实际上,对于已经被共享的代码,我们都不要去修改它们的历史,不要尝试git reset或者git rebase这些篡改历史的操作,因为:

  • 一来,这样的篡改很可能是无效的。git是分布式的版本控制系统,你篡改了共享代码的提交历史,但这段提交历史被团队内多人保存着,他们的push会恢复这段提交历史
  • 二来,commit的取消和他人对commit的恢复,会让代码的历史commit更加混乱不清晰

查找commit_id的两个命令

  • git reflog
    Git提供了一个命令git reflog,记录了导致仓库版本库发生变化的每一次命令,如git commit/git reset等
  • git log
    git log记录了每一次commit的日志
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 2,356评论 0 1
  • Add & Commit git init 初始化一个 Git 仓库(repository),即把当前所在目录变成...
    冬絮阅读 4,774评论 0 8
  • git是版本管理软件,服务器和客户机都有版本库,而且版本库中都可以有所有的版本。客户机和服务器通过push、clo...
    简公孙策阅读 264评论 0 0
  • 其实使用git已经有两年多时间了,但是对Git的概念一直懵懵懂懂,平时常用的命令就那么几个,而且大部分的时候都是直...
    Claire_wu阅读 590评论 0 5
  • Git权威指南 Git初始化 创建版本库以及第一次提交 本章主要学习:git init、git add和git c...
    阿洋12138阅读 436评论 0 0