再也不讓git坑自己了

語言: CN / TW / HK

——前言

作為一個資深的sourcetree使用者(git視覺化操作工具),平時對git命令列命令用的少之又少。基本就是clone,pull,add,commit,push.無非也就是這些。(一般合併,解決衝突都是結合視覺化工具的)。我覺得可能是我對自己工具人屬性的過於肯定。我就在簡歷上面寫了熟練使用git進行版本操作。這可坑慘了自己。

真實尷尬小劇場

  • 面試官問:假如你在add,commit之後發現自己提交的內容不太好,想要返回修改怎麼辦。

  • 我? 那我直接在修改一次add,commit不就行了?

  • 面試官看了我一眼笑了笑,那你就不害怕留下記錄,被當成bad case在大會上點名’表揚‘嗎?

  • 我。。。。。。

(ps:後面我補了補,只要git checkout . 將本地庫中的提交返回工作區去修改就行了。)

—— (腦補面試官追問,要是已經push到遠端分支呢? git reset 我強制刪除提交分支,不留痕跡。什麼太暴力了,那git revert回滾給自己留有餘地)

下面正式介紹一些常用git命令,讓你擺脫一個工具人的名號

image.png

如圖所示:

首先下拉程式碼

git clone +倉庫地址,可以將遠端倉庫克隆到本地(當然合作開發需要許可權),後續更新程式碼只需要git pull 即可。

git pull 下載程式碼和工作區程式碼快速合併。 (相當於git fetch + git merge)但是後者比較合理可以比較之後合併,前者的話,易出現衝突。需要手動去解決

補充一下fork

git fork 也有拉取的含義。不過具體一點說,它相當於在你的github 遠端倉庫裡複製了一份別人的倉庫 此時你在git add, git commit ,git push 是修改你自己遠端倉庫裡面的程式碼。如果想要修改原倉庫需要pull request ,原倉庫主人就會收到請求,並決定要不要接受你的程式碼

image.png

如上圖 就有一個fork按鈕也是這個作用。

設定配置

  • git config [--global] user.name "[name]"
  • git config [--global] user.email "[email address]" 用來標記你個人資訊,防止你瞎改一通之後找不到人。(小心一點,你被👀著的)

提交三大流程

  • git add. 追蹤工作區的程式碼(只有add後才能commit)
  • git commit -m "補充說明資訊" 上傳暫存區程式碼到本地工作區
  • git push 上傳本地工作區程式碼並快速合併

git status 檢視修改情況

衝突

一般情況下,出現分支的場景有如下:

  • 多個分支程式碼合併到一個分支時
  • 多個分支向同一個遠端分支推送

需要手動在檔案中解決。如圖所示,選擇Accept current change (接受本次修改),Accept incoming change(接受傳入的修改) 或者手動合併兩者。然後儲存修改 ,繼續add commit push上傳。

(ps:合作開發時候,每次push之前一定要先pull ,拉一下程式碼,解決一下衝突。千萬不能暴力上傳)

image.png

撤銷

  • git checkout [file] 恢復暫存區的指定檔案到工作區
  • git checkout [commit] [file] 恢復某個commit的指定檔案到暫存區和工作區
  • git checkout . 恢復暫存區的所有檔案到工作區
  • git revert 保留之前的提交記錄 (也就是說,萬一你是一個小馬虎,revert之後發現沒錯,是後端錯誤,你還可以繼續在回去上一個版本)
  • git reset 相當於直接刪除本版本,迴歸上一個版本。

暫存

-git stash 對工作區程式碼暫時儲存。 這是一個非常實用的功能,只是很可能被忽略掉。

舉個🌰

你開發一個大專案到一半,突然線上有個臨時bug要修復,但是程式碼還不想進行提交,這時候可以執行git stash 進行暫存,工作區會恢復到上次提交前的狀態。 然後我們就可以新開分支修復bug。待一切完成 之後 git stash pop 拿回記錄繼續開發。當然如果此期間修改了同一檔案需要手動解決衝突。

關於git stash常見的命令如下:

  • git stash 暫存
  • git stash list 檢視本分支所有暫存程式碼
  • git stash pop 後加stash的name 取出對應的暫存。(name一般自動命名,如下圖形式)

image.png - git stash apply 應用某個暫存與pop 不同的是pop後會從list中消失
- git stash drop 後加name 刪除某個暫存 - git stash clear 刪除所有暫存

總結

image.png