Oh 讓人抓狂的git

2021-07-23 07:26:48 字數 2223 閱讀 1497

原文: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的基礎上,優化了編碼部分,在寫程式時,使編碼問題很簡單就解決。指建立...