Git 常用基本操作

zyfsuzy發表於2019-03-01

git 流程

分支

1. git branch <branch name>

在本地建立一個新的分支名為<branch name>, 此時在遠端看不到該分支, 需要將該分支推送到遠端。檢視自己本地分支: git branch 檢視剛才新建立的分支

2.git checkout <branch name>

進行本地分支的切換,切換至上述新建的分支<branch name>

3.git checkout -

切換至上一個分支,命令效果等同於cd -

3.git push --set-upstream origin <branch name>

推送該分支到遠端,並建立關聯。所謂關聯是指後續所有提交到該分支,如git push, 如果不進行次操作,git 會進行提示

4. git branch -c

該命令等同於上述1.2步,新建立分支同時會進行切換到新分支

5. git branch -r: git branch : git branch -a

上述都檢視分支, 檢視遠端分支, 檢視本地分支, 檢視所有分支,操作者當前所在分支用 * 號標記。

6. git branch -d <branch name>

刪除一個本地分支,切換至別的分支,否則刪除不了。

7. git push origin --delete <branch name>

刪除遠端分支

檔案修改提交

8. git status

檢視當前分支工作區、暫存區的工作狀態,

9. git status -sb

以簡潔的方式顯示工作區檔案狀態

10. git add <filename>

將該檔案加入暫存區

11. git add . || git add -A

將所有的新建立的檔案加入暫存區, 執行git add命令的時候,git首先會通過hash函式算出檔名A.java對應的sha-1值, 該值是32位16進值,git 取前兩位在.git 目錄objects目錄下建立一個以後30為檔名的檔案。

12. git diff xxx

檢視檔案的修改

13. git commit -m "<message>" <filename>

提交該檔案至本地倉庫, 如果提交所有檔案可以使用git commit .命令

14. git commit || git commit -a

提交所有檔案修改,並開啟vim介面,填寫 message , 作用是規範提交的 message,效果等同於arc。 可以參照Angular 團隊的規範。修改自己本地提交 message 參照優雅的提交你的 Git Commit Message

15. git pull

更新遠端的程式碼並與本地進行合併, 如果自己修改了程式碼, 獲取別人時會產生一次無用的 merge提交記錄。

gir merge

16. git pull --rebase

同樣的拉取遠端程式碼,並與原生程式碼自動合併,但不會產生上述無用的 commit , 讓分支節點迭代更加優美、清晰

17. git fetch

拉取遠端程式碼,但不會進行 merge , 需要自己手動執行 git merge <filename> 進行合併

17. git push

將原生程式碼修改推送至遠端

日誌檢視

18. git log -x

檢視最近X的提交日誌

19. git log -x --pretty=oneline

去除提交日誌裡的 date 以及 author, 顯示為一行

20. git show --stat

顯示最近一次的提交日誌,並顯示修改的檔案

21. git show <commit-id>

檢視對應的 commit-id 修改詳情, 具體的修改內容檢視。

22. git log HEAD~1

HEAD 指標指向的最後一次提交,也可以檢視最後一次提交的log

23. git show HEAD~1

檢視最近一次的修改內容詳情

檔案回滾

24. git checkout <filename>

前置條件沒有 commit 到本地倉庫,撤銷filename檔案在工作區的修改到最近一次git add 或 git commit時的內容,就是清空當前工作區的修改

25. git reset --mixed <commit-id>

沒有 push 到遠端之前,回滾到指定 commit-id , mixed 是git預設的回滾方式,會清空暫存區保留工作區。如回滾前有兩個 commit-id

回滾前

回滾後如下圖:

回滾後

檔案顯示沒有被 add 到快取區,但是保留了該檔案, 並將 commit-id 擦除,擦除的 commit-id 可以恢復reflog

26. git reset --soft <commit-id>

soft
該命令會會同時儲存暫存區和工作區內容,並將 commit-id 擦除,擦除的 commit-id 可以恢復用reflog

27. git reset --hard <commit-id>

該命令會同時清除工作區和暫存區,並將 commit-id 擦除,擦除的 commit-id 可以恢復reflog

28. git revert <commit-id>

在已經將程式碼 push 到遠端後,回滾時使用該命令,注意指定的是要回滾的 commit-id , 回退結束後任何內容都不會保留。git reset 是把HEAD向後移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,能夠抵消要被revert的內容。

分支合併

29. git merge <branchname>

開始前請切換你的 target 分支 ,執行該命令會將 <source branch> 程式碼合併。缺點:git 預設是以 fast-forward 方式進行合併,屬於“快進方式”,這種情況如果刪除分支,則會丟失分支資訊。因為在這個過程中沒有建立commit。

30. git merge --no-ff <branch name>

和上一條命令的區別在於下圖

git merge --no-ff
會儲存分支的所有 commit-id , 併產生一次新的提交

Git Tag

tag 的作用是對某個提交點打上標籤,釋出版本後打tag,便於以後回滾特定版本。tag 是對某一版本的記錄,tag就是一個只讀的 branch ,一般為每一個可釋出的里程碑版本打一個tag

31. git tag v1.1.0

在本地對當前分支打 tag

32. git push origin --tag

將建立的 tag 提交至遠端

33. git tag -d v1.0.0

刪除本地tag

34. git push --delete origin v1.0.0

刪除遠端的 tag

35. git show <tag name>

git tag
記錄了對應的 commi-id 可以直接用於回滾使用

Git 與 SVN 操作對比

git vs svn

SVN Git 說明
svn checkout git clone 檢出專案
svn update git pull git fetch 更新
svn commit git commit git push 提交
svn add git add 新增
svn mv git mv 移動
svn rm git rm 刪除
svn status git status 檢視狀態
svn log git log 檢視log
svn diff git diff 檢視差異
svn revert git checkout git reset git revert 回滾 、撤銷
svn copy git branch 且分支
svn switch git checkout 切換分支
svn copy git tag 建立tag
svn merge git merge 合併分支

參考文件

  1. Git 常用操作總結
  2. 優雅的提交你的 Git Commit Message
  3. Angular 團隊的git規範
  4. Git 教程

相關文章