亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Mac OS > 正文

Git中一些撤銷和恢復命令的使用小結

2020-10-18 13:14:00
字體:
來源:轉載
供稿:網友

撤銷一個“已公開”的改變

場景: 你已經執行了 git push, 把你的修改發送到了 GitHub,現在你意識到這些 commit 的其中一個是有問題的,你需要撤銷那一個 commit.

方法:

復制代碼
代碼如下:
git revert <SHA>

原理: git revert 會產生一個新的 commit,它和指定 SHA 對應的 commit 是相反的(或者說是反轉的)。如果原先的 commit 是“物質”,新的 commit 就是“反物質” — 任何從原先的 commit 里刪除的內容會在新的 commit 里被加回去,任何在原先的 commit 里加入的內容會在新的 commit  里被刪除。

這是 Git 最安全、最基本的撤銷場景,因為它并不會改變歷史 — 所以你現在可以  git push 新的“反轉” commit 來抵消你錯誤提交的 commit。

撤銷“本地的”修改

場景: 一只貓從鍵盤上走過,無意中保存了修改,然后破壞了編輯器。不過,你還沒有 commit 這些修改。你想要恢復被修改文件里的所有內容 — 就像上次 commit 的時候一模一樣。

方法:

復制代碼
代碼如下:
git checkout -- <bad filename>

原理: git checkout 會把工作目錄里的文件修改到 Git 之前記錄的某個狀態。你可以提供一個你想返回的分支名或特定 SHA ,或者在缺省情況下,Git 會認為你希望 checkout 的是 HEAD,當前 checkout 分支的最后一次 commit。

記?。耗阌眠@種方法“撤銷”的任何修改真的會完全消失。因為它們從來沒有被提交過,所以之后 Git 也無法幫助我們恢復它們。你要確保自己了解你在這個操作里扔掉的東西是什么?。ㄒ苍S可以先利用 git diff 確認一下)
Git倉庫撤銷至前一次提交時的狀態


復制代碼
代碼如下:
$ git checkout <SHA>

“”是你想查看的提交擁有的哈希值Hash Code中前8至10個字符。 這個命令會使<HEAD>指針脫離detach,可以讓你在不檢出check out任何分支的情況下查看代碼——脫離HEAD并不像聽上去那么可怕。如果你想在這種情況下提交修改,你可以通過創建新的分支來實現:


復制代碼
代碼如下:
$ git checkout -b <SHA>

要想回到當前的工作進度,只需要檢出check out你之前所在的分支即可。


撤銷最近一次代碼提交
有時候你可能會不小心提交了錯誤的文件或一開始就遺漏了某些東西。下面這三步操作可以幫助你解決這個問題。

復制代碼
代碼如下:

$ git reset --soft HEAD~1
# 對工作文件進行必要的更改
$ git add -A .
$ git commit -c ORIG_HEAD

你執行第一個命令時,Git會將HEAD指針后移到此前的一次提交,之后你才能移動文件或作必要的修改。

然后你就可以添加所有的修改,而且當你執行最后的命令時,Git會打開你的默認文本編輯器,其中會包含上一次提交時的信息。如果愿意的話,你可以修改提交信息,或者你也可以在最后的命令中使用-C而不是-c,來跳過這一步。


撤銷合并Merge
要想撤銷合并,你可能必須要使用恢復命令HARD RESET回到上一次提交的狀態。“合并”所做的工作基本上就是重置索引,更新working tree(工作樹)中的不同文件,即當前提交()代碼中與HEAD游標所指向代碼之間的不同文件;但是合并會保留索引與working tree之間的差異部分(例如那些沒有被追蹤的修改)。

復制代碼
代碼如下:

$ git checkout -b <SHA>

在撤銷“本地修改”之后再恢復

場景: 你提交了幾個 commit,然后用 git reset --hard 撤銷了這些修改(見上一段),接著你又意識到:你希望還原這些修改!

方法:

復制代碼
代碼如下:
git reflog

復制代碼
代碼如下:
git reset

復制代碼
代碼如下:
git checkout

原理: git reflog 對于恢復項目歷史是一個超棒的資源。你可以恢復幾乎 任何東西 — 任何你 commit 過的東西 — 只要通過 reflog。

你可能已經熟悉了 git log 命令,它會顯示 commit 的列表。 git reflog 也是類似的,不過它顯示的是一個 HEAD 發生改變的時間列表.

一些注意事項:

它涉及的只是 HEAD 的改變。在你切換分支、用 git commit 進行提交、以及用 git reset 撤銷 commit 時,HEAD 會改變,但當你用  git checkout -- <bad filename> 撤銷時(正如我們在前面講到的情況),HEAD 并不會改變 — 如前所述,這些修改從來沒有被提交過,因此 reflog 也無法幫助我們恢復它們。
git reflog 不會永遠保持。Git 會定期清理那些 “用不到的” 對象。不要指望幾個月前的提交還一直躺在那里。
你的 reflog 就是你的,只是你的。你不能用 git reflog 來恢復另一個開發者沒有 push 過的 commit。

2015127114148155.png (1429×644)

大量的撤銷/恢復

場景: 你向某個方向開始實現一個特性,但是半路你意識到另一個方案更好。你已經進行了十幾次提交,但你現在只需要其中的一部分。你希望其他不需要的提交統統消失。

方法:

復制代碼
代碼如下:
git rebase -i <earlier SHA>

原理: -i 參數讓 rebase 進入“交互模式”。它開始類似于前面討論的 rebase,但在重新進行任何提交之前,它會暫停下來并允許你詳細地修改每個提交。

rebase -i 會打開你的缺省文本編輯器,里面列出候選的提交。如下所示:

2015127114214865.png (1459×495)
前面兩列是鍵:第一個是選定的命令,對應第二列里的 SHA 確定的 commit。缺省情況下, rebase -i  假定每個 commit 都要通過  pick 命令被運用。

要丟棄一個 commit,只要在編輯器里刪除那一行就行了。如果你不再需要項目里的那幾個錯誤的提交,你可以刪除上例中的1、3、4行。

如果你需要保留 commit 的內容,而是對 commit 消息進行編輯,你可以使用 reword 命令。 把第一列里的 pick 替換為 reword (或者直接用 r)。有人會覺得在這里直接重寫 commit 消息就行了,但是這樣不管用 —rebase -i 會忽略 SHA 列前面的任何東西。它后面的文本只是用來幫助我們記住 0835fe2 是干啥的。當你完成 rebase -i 的操作之后,你會被提示輸入需要編寫的任何 commit 消息。

如果你需要把兩個 commit 合并到一起,你可以使用 squash 或 fixup 命令,如下所示:

2015127114237973.png (1449×339)
squash 和 fixup 會“向上”合并 — 帶有這兩個命令的 commit 會被合并到它的前一個 commit 里。在這個例子里, 0835fe2 和 6943e85 會被合并成一個 commit, 38f5e4e 和 af67f82 會被合并成另一個。

如果你選擇了 squash, Git 會提示我們給新合并的 commit 一個新的 commit 消息; fixup 則會把合并清單里第一個 commit 的消息直接給新合并的 commit 。 這里,你知道 af67f82 是一個“完了完了….” 的 commit,所以你會留著 38f5e4e as的 commit 消息,但你會給合并了 0835fe2 和 6943e85 的新 commit 編寫一個新的消息。

在你保存并退出編輯器的時候,Git 會按從頂部到底部的順序運用你的 commit。你可以通過在保存前修改 commit 順序來改變運用的順序。如果你愿意,你也可以通過如下安排把 af67f82 和 0835fe2 合并到一起:
2015127114254840.png (1445×326)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品影院在线观看| 欧美日韩国内自拍| 欧美性xxxx极品高清hd直播| 精品久久久久久久中文字幕| 久久久国产精品视频| 亚洲美女自拍视频| 国产成+人+综合+亚洲欧美丁香花| 亚洲欧洲国产精品| 亚洲韩国青草视频| 欧美大奶子在线| 中文字幕在线观看亚洲| 亚洲天堂影视av| 亚洲精品少妇网址| 色系列之999| 久久99热精品这里久久精品| 亚洲综合日韩在线| 亚洲aa中文字幕| 亚洲国产中文字幕在线观看| 91亚洲国产成人久久精品网站| 国产精品人成电影在线观看| 久久成人综合视频| 亚洲国产欧美一区二区三区同亚洲| 茄子视频成人在线| 精品久久久免费| 日韩欧美中文免费| 亚洲一区二区三区视频| 国产亚洲精品91在线| 欧美日韩福利在线观看| 欧美福利小视频| 综合网日日天干夜夜久久| 欧美成人精品在线播放| 久久久久国产一区二区三区| 午夜精品久久久久久久99热| 国产欧美一区二区三区久久人妖| 日韩在线免费视频| 久久久久久伊人| 久久久久久成人精品| 亚洲精品电影网在线观看| 国产又爽又黄的激情精品视频| 欧美—级高清免费播放| 日韩精品视频在线观看免费| 亚洲国产精品专区久久| 国产精品揄拍一区二区| 欧美精品激情blacked18| 国产九九精品视频| 亚洲aa中文字幕| 亚洲社区在线观看| 国产成+人+综合+亚洲欧美丁香花| 国产精品成人观看视频国产奇米| 亚洲欧美成人精品| 亚洲自拍偷拍区| 国产精品久久久亚洲| 欧美性猛交xxxx乱大交| 久久久999成人| 亚洲男人天堂网站| 国产精品96久久久久久又黄又硬| 国产福利视频一区二区| 欧美日韩一区二区三区| 久久精品在线播放| 日韩欧美国产一区二区| 中文字幕在线观看亚洲| 欧美日韩国产中文精品字幕自在自线| www.久久色.com| 午夜精品久久久久久久久久久久| 一区二区三区美女xx视频| 亚洲在线免费看| 欧美激情xxxxx| 国产九九精品视频| 欧美肥老妇视频| 欧美xxxx14xxxxx性爽| 午夜剧场成人观在线视频免费观看| 俺去亚洲欧洲欧美日韩| 亚洲网站在线观看| 91国内精品久久| 国产成人啪精品视频免费网| 欧美大肥婆大肥bbbbb| 亚洲精品女av网站| 亚洲影院色无极综合| 韩国精品久久久999| 亚洲人成在线播放| 日韩在线观看你懂的| 91网站免费看| 久久亚洲私人国产精品va| 国产精品欧美日韩一区二区| 欧美激情欧美激情在线五月| 亚洲欧美日韩综合| 黑人欧美xxxx| 日韩视频第一页| 成人看片人aa| 91av视频在线免费观看| 亚洲视频一区二区三区| 久久久久久欧美| 亚洲成人免费在线视频| 亚洲国产精品成人va在线观看| 菠萝蜜影院一区二区免费| 96sao精品视频在线观看| 国产精品福利久久久| 热久久免费国产视频| 欧美日韩久久久久| 性色av一区二区三区| 色偷偷9999www| 亚洲最大成人网色| 国产精品看片资源| 欧美日本黄视频| 美女999久久久精品视频| 日韩欧美在线视频日韩欧美在线视频| 久久五月天色综合| 操91在线视频| 91九色在线视频| 国产精品一区久久| 91久久精品日日躁夜夜躁国产| 成人中文字幕在线观看| 久久视频在线看| 狠狠爱在线视频一区| 欧美电影免费观看网站| 日韩精品在线视频| 亚洲欧美中文日韩v在线观看| 亚洲国产91色在线| 人人做人人澡人人爽欧美| 青青草精品毛片| 亚洲另类欧美自拍| 日韩久久精品成人| 欧美国产日韩在线| 国产不卡av在线| 最近中文字幕mv在线一区二区三区四区| 69久久夜色精品国产69| 国产欧美精品日韩| 国产精品视频一| 亚洲欧洲激情在线| 欧美日韩一区二区三区在线免费观看| 91牛牛免费视频| 久久久久久高潮国产精品视| 欧美乱妇高清无乱码| 欧美午夜女人视频在线| 国产精品久久久精品| 国产精品视频久久久久| 国产精品中文久久久久久久| 1769国内精品视频在线播放| 一区二区三区黄色| 91超碰caoporn97人人| 精品美女久久久久久免费| 欧美另类第一页| 夜夜嗨av色一区二区不卡| 狠狠干狠狠久久| 亚洲性xxxx| 欧美视频二区36p| 97精品一区二区视频在线观看| 欧美日韩亚洲一区二| 91精品视频在线看| 在线午夜精品自拍| 亚洲国产精品福利| 亚洲毛茸茸少妇高潮呻吟| 日韩欧美第一页| 欧美寡妇偷汉性猛交| 日韩激情视频在线| 亚洲欧美成人网| 美女精品久久久| 久久这里有精品| 97在线看免费观看视频在线观看| 欧美黑人视频一区| 国产精品永久在线| 欧美精品一区二区三区国产精品| 国产在线一区二区三区| 91在线观看免费观看|