git撤銷修改

在實際開發(fā)過程中耻讽,作為一名程序猿,可能會遇到這樣一個問題速勇,有時候提交的代碼太多了壕探,希望將代碼回滾阅签,有時候要將本地的修改廢棄掉十办。這些操作都會在日常開發(fā)中遇到馅扣,今天希望把提交中一個文件回滾盈蛮,但是不小心把所有文件全部會滾了兄纺,一臉懵逼大溜。所以,這篇文章就來好好總結以下git的撤銷修改操作估脆。

撤銷修改:

情形1:文件修改后還沒有被放到暫存區(qū)

當對git工作區(qū)中的文件進行修改之后钦奋,通過git status命名會出現(xiàn)以下信息:

On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

情形2:文件被添加到了暫存區(qū)

如果將文件README.md通過git add放入stage(暫存區(qū)),通過git status會出現(xiàn)以下信息:

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   README.md

根據(jù)提示疙赠,只需要通過git reset就可以將修改從暫存區(qū)中清除付材,此時實際上是回到了情形1中:

git reset HEAD README.md 

Unstaged changes after reset:
M   README.md

git status 

On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

情形3:文件被提交到了本地分支

如果通過git commit將修改提交到了本地分支,這次修改又該怎么撤銷圃阳?

1.通過git log查看本地分支的歷史提交記錄:

commit d24b19e5cee389f1e1f2bb906fc5765d321da8cd (HEAD -> master)
Author: xxxxxxxxxx
Date:   Wed Jul 25 22:44:48 2018 +0800

    修改README.md

commit 2f4c6e119c38a8f0b71dd20244903f57079fbc3c (origin/master)
Author: xxxxxxxxxx
Date:   Wed Jul 25 20:53:13 2018 +0800

    udpate

2.通過git reset --hard {commitId}或者git reset --hard HEAD~1

HEAD is now at 2f4c6e1 udpate

可以看到HEAD現(xiàn)在指向的是2f4c6e1這次提交厌衔,最新的提交也已經(jīng)沒了。

3.但是如果在一次提交中包含了多個文件捍岳,撤銷修改只希望撤銷其中的一個文件富寿,上述這個命令顯然是不能夠滿足需求的。如果是這樣的話锣夹,可以通過git reset --soft HEAD~1來實現(xiàn):

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   README.md

命令 git reset --soft {commitId} 的作用就是將修改從本地分支回滾作喘,但是會保留在暫存區(qū)中。

所以這里就有必要講講git reset這個命令:

git reset [<mode>] [<commit>]
           This form resets the current branch head to <commit> and possibly
           updates the index (resetting it to the tree of <commit>) and the
           working tree depending on <mode>. If <mode> is omitted, defaults to
           "--mixed". The <mode> must be one of the following:

           --soft
               Does not touch the index file or the working tree at all (but
               resets the head to <commit>, just like all modes do). This
               leaves all your changed files "Changes to be committed", as git
               status would put it.

           --mixed
               Resets the index but not the working tree (i.e., the changed
               files are preserved but not marked for commit) and reports what
               has not been updated. This is the default action.

               If -N is specified, removed paths are marked as intent-to-add
               (see git-add(1)).

           --hard
               Resets the index and working tree. Any changes to tracked files
               in the working tree since <commit> are discarded.

           --merge
               Resets the index and updates the files in the working tree that
               are different between <commit> and HEAD, but keeps those which
               are different between the index and working tree (i.e. which
               have changes which have not been added). If a file that is
               different between <commit> and the index has unstaged changes,
               reset is aborted.

               In other words, --merge does something like a git read-tree -u
               -m <commit>, but carries forward unmerged index entries.

           --keep
               Resets index entries and updates files in the working tree that
               are different between <commit> and HEAD. If a file that is
               different between <commit> and HEAD has local changes, reset is
               aborted.
 

這里面值得注意的就是:
1.如果使用--hard模式的話晕城,commit之后的所有修改都會被廢棄,無法找回窖贤。之前不慎用了--hard,欲哭無淚砖顷。
2.默認使用的是--mixed,重置了暫存區(qū)(index)赃梧,但不會重置工作區(qū)(working tree)滤蝠。所有的修改都還在。

其實上述三種模式總結以下就是:

reset模式 工作區(qū) 暫存區(qū) 本地分支
--hard
--mixed 保留
--soft 保留 保留
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末授嘀,一起剝皮案震驚了整個濱河市物咳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹄皱,老刑警劉巖览闰,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巷折,居然都是意外死亡压鉴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門锻拘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來油吭,“玉大人击蹲,你說我怎么就攤上這事⊥裨祝” “怎么了歌豺?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長心包。 經(jīng)常有香客問我类咧,道長,這世上最難降的妖魔是什么谴咸? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任轮听,我火速辦了婚禮,結果婚禮上岭佳,老公的妹妹穿的比我還像新娘血巍。我一直安慰自己,他們只是感情好珊随,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布述寡。 她就那樣靜靜地躺著,像睡著了一般叶洞。 火紅的嫁衣襯著肌膚如雪鲫凶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天衩辟,我揣著相機與錄音螟炫,去河邊找鬼。 笑死艺晴,一個胖子當著我的面吹牛昼钻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播封寞,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼然评,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狈究?” 一聲冷哼從身側響起碗淌,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抖锥,沒想到半個月后亿眠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡宁改,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年缕探,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片还蹲。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡爹耗,死狀恐怖耙考,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潭兽,我是刑警寧澤倦始,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站山卦,受9級特大地震影響鞋邑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜账蓉,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一枚碗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铸本,春花似錦肮雨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锡足,卻和暖如春波丰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舶得。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工掰烟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沐批。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓媚赖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親珠插。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一颖对、電腦本地初始化一個倉庫 1. git init: 初始化一個電腦上本地倉庫 終端進入項目目錄捻撑,輸入: 該命令將...
    dragon_li閱讀 2,944評論 1 4
  • Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來缤底。這樣一來顾患,任何一處協(xié)同...
    __silhouette閱讀 15,899評論 5 147
  • Git 命令行學習筆記 Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 3,926評論 0 11
  • 大學的最后一堂課結束了个唧。沒有華麗的落幕江解,只有可笑的低分。法語課口語考試徙歼,最低分犁河。真是一個好的結束鳖枕。 四年間,這門課...
    青南閱讀 186評論 0 2
  • 醉酒當歌古今多桨螺, 吟詩作賦新舊合宾符。 不因格律平仄縛, 只求意境韻粘和灭翔。 八股文風是可取魏烫, 新人新氣贏贊歌。 倡導移...
    小啟明星閱讀 256評論 2 7