jinzhe

jinzhe

github
email

Git入門

Git 是一種分佈式的版本控制系統。

Note

- 版本控制,顧名思義可以記錄歷史,並在需要時回退。
- 分佈式的概念是多了一個本地倉庫,每一個本地倉庫都存在所有的版本,過程中無需聯網提交(但是到最後還是要把代碼提交到中央倉庫)。

add#

add 的作用是把工作區改變的代碼提交到暫存區,以監聽文件內部的改變

git add <>

文件狀態由 “未跟踪” 變成 “已暫存

Warning

add 添加的為文件改變而非文件本身!

快速 add#

暫存所有文件

git add .

commit#

commit 的作用是將暫存區的代碼提交到本地倉庫

git commit

快速 commit#

git commit -m <提交信>

push#

將本地提交到遠程倉庫,本質其實是將當前的分支連同它路徑上的commit一併提交到遠程倉庫

git push <主機> <分支>

快速 push#

提交本地所有分支。

 git push

log#

commit 完成之後你你就成功完成了一次提交,現在查看一下剛剛提交的 commit ,這裡記錄了 commit 的 SHA-1,提交的作者,提交時間

git log

查看內容變動的 log#

顯示詳細的文件內容變動。

git log -p

查看簡單的 log#

只顯示文件變化統計。

git log --stat

show#

只查看當前 commit 信息#

git show

查看某一條 commit 信息#

git show SHA-1

查看某一條 commit 信息中的文件#

git show SHA-1 <>

pull#

git pull 其實是 git fetchgit merge 的集合,
拉取目標 branch 的所有 commit 和當前的 commit 合併生成一個新的 commit。

git pull <主機> <分支>

pull 操作在一定程度上會幫你自動合併:

  • 如果一個分支改了 A 文件,另一個分支改了 B 文件,合併之後兩個文件都會改。
  • 如果一個分支改了 A 文件第一行,另一個分支改了 A 文件第二行,合併之後 A 文件第一行和第二行也都改了。
  • 是如果一個分支改了 A 文件第一行,另一個分支也改了 A 文件第一行,這就出問題了,需要手動解決一下衝突。

衝突解決完畢之後需要重新 add、commit,這個時候發現 git 會自動幫我們填好了 log 信息,提交就可以。

branch#

git 和其他版本控制系統的主要區別就是 git 有branch的概念,意思翻譯為分支,實質為 commits 的引用。

引用相當於 commit 的快捷方式,我們看到每一個commit都有一個 SHA-1 的加密值,這個值重複率極低,低到我們可以用前幾個值來代替,比如我們可以用7800ba來代表上一次的 commit,後面的HEAD -> mastergithub/master也是指向這個 commit 的引用。

HEAD:當前分支的引用#

當前分支的引用指的是當前工作目錄對應的commit,當你有提交的時候,HEAD 也會自動指向當前的commit。總之,當前commit在哪裡,HEAD就在哪裡,你永遠可以用HEAD來操作當前commit

branch:分支#

HEAD除了可以引用commit,也可以引用一個branch,在指向branch的時候,間接的指向了對應的commit,當前分支被提交的時候,HEAD拉著對應的branch一起移動。

main:默認 branch#

main 分支是項目在被 clone 下來的時候默認創建的。

Note

所有的 branch 都是平等的。

branch 的操作#

創建 branch#

git branch <分支>

切換 branch#

git checkout <分支>

這樣是不是有點麻煩,我們可以把兩步合在一起:
創建一個分支並立即切換過去。

git checkout -b <分支>

刪除 branch#

git branch -d <分支>

Note

- 刪除時要切換到其他 branch 進行刪除
- 刪除 branch 只是刪除對 commit 的引用,所在 branch 的提交並沒有刪除
- 沒有合併過 master 的分支刪除失敗(出於安全考慮),換成大寫-D就可以了

工作流 Branching#

市面上最流行的工作流

  1. 假如有一個項目需要你開發功能,於是你在項目上新建了一個分支
git checkout -b zhang
  1. 開發完畢之後你可以推送到遠程分支上去:
git add .
git commit -m "開發完成"
git push origin zhang
  1. 然後你告訴同事說可以 review 一下你的代碼,同事說可以,所以你同事就:
git pull
git checkout zhang
  1. 同事說看了沒問題,可以合併到 master。 於是你就把 zhang 合併到 master 上去。 如果同事說有問題,你可以修改代碼重複流程2
git checkout master
git pull
git merge zhang

最後推送到遠程倉庫並刪除本地 / 遠程分支:

git push
git branch -d zhang
git push origin -d zhang
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。