分支
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
提交記錄。
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>
該命令會會同時儲存暫存區和工作區內容,並將 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>
和上一條命令的區別在於下圖
會儲存分支的所有 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>
記錄了對應的 commi-id 可以直接用於回滾使用
Git 與 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 | 合併分支 |
參考文件