原文:oh ****, git!
譯者:傑微刊兼職譯者張帆
git很難:因為搞砸了很容易,但是找到如何修復錯誤的方法缺很難。git官方的文件,存在「先有雞還是先有蛋」的問題——除非你知道解決問題的方法的特定名字,否則很難查詢到解決方案並順利的解決自己的問題。
所以,下面是我自己曾經遇到的一些十分糟糕的場景,並且我最終解決了這些問題,下面就用最通俗的話介紹一下。
oh ****,我做了一件大錯事!請告訴我git有時間機器這樣的東西!
1
``` git reflog
你會看到通過git提交的每一項內容的清單列表,包含所有的分支
每一項提交都有自己的索引:
head@
找到你誤提交的前乙個分支
git reset
head@
神奇的時光機!
```
你可以通過這種方式來恢復誤刪除的內容,也可以移除導致目錄錯亂的提交,或者恢復乙個糟糕的合併,或者只是回退到某個所有的事情都是ok的時間點。我平時大量的使用relog,這個一定要告訴更多的人!
oh ****,提交之後我才意識到還需要做乙個小改動!
```做你的改動
git add . # or add individual files git commit --amend
根據提示修改或者保留提交資訊
這時,你的上一次提交就包含本次變動啦
```
這種情景經常在我提交之後發生,然後我特喵的還要執行一些指令碼……這個就不多提了,說多了都是淚。你也可以把這個改變作為乙個新提交,然後執行rebase -i把兩個提交揉成一起,但是最開始提到的方法大概要快很多。
oh ****,我需要調整我上一次提交的資訊!
``` git commit --amend
根據提示來保留或者改變提交資訊
``` 對提交資訊的格式,這特麼的有個愚蠢的要求。
oh ****,我誤將應當提交到乙個新分支的內容提交master上了!
```建立乙個基於master的當前狀態的新分支
git branch some-new-branch-name
移除到master上的提交
git reset head~ --hard git checkout some-new-branch-name
現在你的提交僅存在在這個新分支中啦 :)
```
注意:如果你已經將提交push到遠端,則這個方法不會生效,如果你已經嘗試了其他方法,可能你需要先git reset
head@而不是head~。此外,很多人建議了這個更短但是更炫酷的方法,而我自己之前並不知道~感謝大家!
oh ****,我不小心提交到錯誤的分支上了!
```撤銷上一次提交,但是保留變更可用
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 ****,我想執行一下diff,但是啥效果也沒有?
git diff --staged
如果不使用--staged,git不會對比已經add-ed的檔案之間的差異。
媽的智商,我放棄了……
cd .. sudo rm -r ****ing-git-repo-dir git clone
cd ****ing-git-repo-dir 愛咋咋,直接刪除重新clone!(手動doge臉)
讓人抓狂HTML DTD
在做網頁時,經常會遇到一些瀏覽器差異的問題,即使你對常見瀏覽器差異有些知識儲備,但你死活也修改不好。我就遇到幾個這樣的問題。兩個div之間在ie下有幾個畫素的空白,乙個div莫名其妙的高度變高兩個畫素。雖然都是小問題,但是不解決心理總覺得彆扭。這些bug改起來很讓人抓狂。最後把替換為,問題就消失了,...
讓人抓狂的縮排衝突 eslint
原本在開開心心地寫著 然鵝格式化後居然有一處 eslint 提示報錯,說我的縮排有問題,刪除多餘的縮排後,再格式化又變成了之前那樣!其它地方都沒問題,為啥就那一小塊會報錯呢?專案使用了 prettier 進行自動格式化,eslint 來進行檢查報錯,可是這倆貌似有世仇,不能好好相處。廢話不多說了,直...
python中讓人抓狂的編碼問題
用python程式設計時,會遇到三個方面的編碼 1 python程式檔案的編碼 2 python開發環境的編碼 3 python讀取寫入檔案 網頁時,這些外部檔案的編碼 python2,在解決編碼問題上,比較複雜 python3在2的基礎上,優化了編碼部分,在寫程式時,使編碼問題很簡單就解決。指建立...