1. 程式人生 > >Oh! 讓人抓狂的git!

Oh! 讓人抓狂的git!

Git很難:因為搞砸了很容易,但是找到如何修復錯誤的方法缺很難。Git官方的文件,存在“先有雞還是先有蛋”的問題——除非你知道解決問題的方法的特定名字,否則很難查詢到解決方案並順利的解決自己的問題。


所以,下面是我自己曾經遇到的一些十分糟糕的場景,並且我最終解決了這些問題,下面就用最通俗的話介紹一下。

Oh shit,我做了一件大錯事!請告訴我Git有時間機器這樣的東西!

1

``` git reflog
你會看到通過git提交的每一項內容的清單列表,包含所有的分支
每一項提交都有自己的索引:[email protected]{index}
找到你誤提交的前一個分支
git reset

[email protected]{index}
神奇的時光機!
```


你可以通過這種方式來恢復誤刪除的內容,也可以移除導致目錄錯亂的提交,或者恢復一個糟糕的合併,或者只是回退到某個所有的事情都是ok的時間點。我平時大量的使用relog,這個一定要告訴更多的人!


Oh shit,提交之後我才意識到還需要做一個小改動!
```
做你的改動
git add . # or add individual files git commit --amend
根據提示修改或者保留提交資訊
這時,你的上一次提交就包含本次變動啦
```


這種情景經常在我提交之後發生,然後我特喵的還要執行一些指令碼……這個就不多提了,說多了都是淚。你也可以把這個改變作為一個新提交,然後執行rebase -i把兩個提交揉成一起,但是最開始提到的方法大概要快很多。


Oh shit,我需要調整我上一次提交的資訊!

``` git commit --amend
根據提示來保留或者改變提交資訊
``` 對提交資訊的格式,這特麼的有個愚蠢的要求。


Oh shit,我誤將應當提交到一個新分支的內容提交master上了!
```
建立一個基於master的當前狀態的新分支
git branch some-new-branch-name
移除到master上的提交
git reset HEAD~ --hard git checkout some-new-branch-name
現在你的提交僅存在在這個新分支中啦 :)
```


注意:如果你已經將提交push到遠端,則這個方法不會生效,如果你已經嘗試了其他方法,可能你需要先git reset

[email protected]{number}而不是HEAD~。此外,很多人建議了這個更短但是更炫酷的方法,而我自己之前並不知道~感謝大家!


Oh shit,我不小心提交到錯誤的分支上了!
```
撤銷上一次提交,但是保留變更可用
git reset HEAD~ --soft git stash


轉移到正確的分支上
git checkout name-of-the-correct-branch git stash pop git add . # or add individual files git commit -m "your message here"


現在,你的變更已經在正確的分支上啦
```


對於這種場景,很多人建議使用篩選——cherry-pick,所以你需要保證篩選出來的提交是對你最有意義的。


``` git checkout name-of-the-correct-branch
找到上一個提交到master的提交


git cherry-pick master
在master上刪除它


git checkout master git reset HEAD~ --hard ```
Oh shit,我想執行一下diff,但是啥效果也沒有?


git diff --staged
如果不使用--staged,git不會對比已經add-ed的檔案之間的差異。


媽的智商,我放棄了……
cd .. sudo rm -r fucking-git-repo-dir git clone https://some.github.url/fucking-git-repo-dir.git cd fucking-git-repo-dir 愛咋咋,直接刪除重新clone!(手動doge臉)

相關推薦

Oh! git!

Git很難:因為搞砸了很容易,但是找到如何修復錯誤的方法缺很難。Git官方的文件,存在“先有雞還是先有蛋”的問題——除非你知道解決問題的方法的特定名字,否則很難查詢到解決方案並順利的解決自己的問題。 所以,下面是我自己曾經遇到的一些十分糟糕的場景,並且我最終解決了這些問題,下面就用最通俗的話介紹一下。

的許可權問題

在ubuntu下遇到一個怪事。 用vi編定一個文字檔案,下面總示提示[RO],即只有只讀許可權。 這個文字檔案的當前使用者和組都是我自己,我甚至chmod 777 成功後,那個文字檔案還是隻讀。抓狂 後面發現用vi開啟這個檔案時,下面的命令列的那一欄提示 [ILLEGA

word中的自動編號設定方法備忘

在word 2007中使用自動編號,一級編號是1. 2. 3.,二級編號是1.1, 1.2, 1.3,在2.之後本來應該是2.1,但總是自動編成1.1。這個問題記得我畢設的時候就遇到過了,今天又遇到一次,把解決方案放在這裡備忘。 首先,善用樣式管理器,就是點更改樣式右下角那個

啊啊啊啊啊啊啊啊啊啊啊xcode 啊!!!!

之前在桌面新建了一個test專案,裡面用xib拉的介面按鈕(10個按鈕,以及相應的按鍵行為),後來整個專案刪掉了。 重建了一個名字一樣的test專案,用程式碼新建了一個按鈕,然而一run,模擬器中彈出了舊的介面!!!!!!!!!!!!!!!!!!!!! 尼瑪啊啊啊啊啊啊

textarea文字總是居中問題解決辦法

每次文字從資料庫讀到textarea後文字都不居左。在排出樣式,轉義字元等問題後,baidu,google了一會始終沒找到答案。後來發現原來問題出在HTML上     <textarea>   內容內容   </textarea>     上面這句看似

C++霧中風景15:聊聊的Name Mangling

>Name Mangling,直接翻譯過來為**名字改寫** 。它是深入理解 C++ 編譯連結模型的必由之路。 筆者近期進行資料庫開發工作時,涉及到MySQL客戶端的編譯連結的問題,通過重新釐清了之前理解一知半解的**Name Manging**,解決了讓人抓狂的編譯連結問題。 接下來,和大家聊聊C++

兩件小事 之一:Mac OSX上沒有可用的雙拼

1995年我就看上了蘋果電腦,但是沒有錢,也沒必要買,當時的蘋果電腦還很難用,高層應用和PC有很大的差異,但是現在的Mac OSX已經很好用了,很多平時在PC上賴以生存的工具都有了Mac版。簡單舉兩個例子,凡是跟Apache/Eclipse/Mozilla/Codehaus有

Spring Data JPA 全域性DAO的擴充套件(第一次用JPA時總是提示 另的錯誤: No property find for type class )

前幾天看了springside4的mini-web程式碼發現確實有不少新的東東,咱這次單說說Spring Data JPA吧。  引用springside4的 wiki關於對Spring Data JPA的簡介  Spring Data JPA在JPA上又

ERP為何總是企業?

 ERP自上世紀未正式進入中國大陸以來,一直被中國企業作為企業管理工具的熱寵,然而它的匯入並未給企業管理帶來多少實質性的改變,甚至給不少企業在管理上造成很多不便,更有甚者增加了不少管理成本。特別是在中小型民營企業更是如此。     這難道是ERP不行嗎?不是,因為它有成功的

的錯誤:java.lang.IllegalArgumentException: No property find found for type class

使用Spring data jpa時,建立自己的interface,並實現它,分別命名為: interface:ModuleDaoCustom implement:ModuleDaoCustomImpl 然後建立ModuleDao extends PagingAndSort

最近,資料遷移差點

本文微信公眾號「AndroidTraveler」首發。 背景 最近,要重灌 macOS,所以需要拷貝資料進行備份。 而這個備份過程差點讓我抓狂,速度超級慢,等待時間很是煎熬。 分析 這邊看了一下,主要是因為檔案過多對資料遷移速度造成了較大的影響。 大家知道,我們用 AndroidStudio 新建一個 Hel

混亂到近乎的程式碼

給一家工廠寫軟體,是基於一個他們正在使用的軟體新增一些功能。程式碼及其混亂,既無註釋也無文件,甚至連基本的程式碼格式都沒有。修改起來及其困難,效率特別低,很多變數名稱不得不去猜測程式碼什麼意思。 暑假在一家硬體公司實習做DSP開發,讓我詫異的是就連專案經理的程式碼也是及其混亂

我哭笑不得的C語言

1.關於+=以及-= 這是兩個運算子,但你否有過這種經歷: int temp; char i for(i=0;i<MAX;i++) { ... temp=+2; //這裡本意是每次迴圈,temp都自增2,但是卻將'+='寫成了'=+',按照這種寫法,每次迴圈都為temp賦值正數2,與本意相

蛋疼的一下午

重新 nat http .cn flex布局 發生 沒有 png ...   這幾天一直寫React Native,發現自己對flex布局並沒有完全掌握熟練,就重新寫web頁面練習一下,結果發生了蛋疼的事情。   練習一直出問題,心煩得要命,好多flex布局的資料都和我寫

我要了。。又回到了幾天不能A一道題的時候

sdn 做了 csdn ati .net xheditor dsm gif 微笑 poj1556我不做了。你做做把...我已經要game over了 我要抓狂了。。又回到了幾天不能A一道題的時候

怎樣的一生價值最大

人的 dsm 每一個 data- 一個 article pos ack 差距 今天在路上突然想到了一個道理,分享給大家: 事實上每一個人的一生都有翻倍的機會。10倍,100倍,1000倍甚至更高,可是為什麽每一個人還不一樣。有些人已經成為百萬富翁。有些人依舊是苦力。 原

棉花做肉松、塑料做大米哭笑不得!

中國 aid 技術分享 blog 排行 人人 padding 成本 pro iPhone十歲了!蘋果這些年到底對我們的手機做了些什麽? 中國移動A3s悄然面市,599紅米4A面前,它竟敢如此定價! 紅米Pro 2配置曝光:雙攝+3GB運存確認,要做自拍神器? 近日,微信發布

sandglass(沙漏)——一個解脫的python時間處理庫

blank git over google nco trac 通過 對象 pytho 在遊戲開發的過程中頻繁的須要跟時間相關的做處理。而python內置了好多個時間處理庫,datetime/date/time/calendar/timedelta等,細節繁多略具迷惑

Docker模擬多協作進行Git操作

git dcoker laravel 今天我們利用Docker模擬出兩個終端,來進行git提交操作開始前的準備1.安裝docker應用,命令行輸入docker -v如果出現上面的提示就說明docker下載成功了!然後讓我們啟動docker服務service docker start接下來我們要拉取

非常easy誤解的TCP擁塞控制算法

先來 模塊 階段 聯網 進程 分布 detail 體驗 尊重 正文非常多人會覺得一個好的TCP擁塞控制算法會讓連接加速,這樣的觀點是錯誤的。恰恰相反,全部的擁塞控制算法都是為了TCP能夠在貪婪的時候懸崖勒馬,大多數時候。擁塞控制是減少了數據發送的速度。 我