一、總覽
????1 git clone
????2 git checkout
? ? 3 git pull
????4 git add
????5 git commit
????6 git push
????7 git fetch
????8 git branch
????9 git merge
????10 git rebase
????11 git diff
???????git show
????12 git reset
????13 git stash
????14 git revert
????15 git log
????16 git reflog
????17 git cherry-pick
????18 git remote
????19 git clean
????20 git tag
? ? 21 git help
二、詳述
1 git clone
? ? git clone url: 克隆代碼庫
2 git checkout
? ? git checkout branchA :切換到分支A
? ? git checkout -b branchB origin/master :從master最新記錄新建一個分支branchB
? ? git checkout - - fileA: 把工作區中fileA的修改給撤銷掉
? ? git checkout -b dev2?<branch id>:?基于當前分支的某一個commit號創建分支
3 git fetch
?? ?git fetch:把遠程分支的所有改變拉回本地
? ? git fetch origin master:?把遠程主機 origin上 master分支改變拉取到本地? ??
4 git?pull
? ? git pull = git fetch + git merge
? ??Git pull: 把當前分支關聯的遠程分支的最新改變拉倒本地,并進行merge操作
? ? git pull origin master: 把遠程master分支的最新改變拉倒本地,并進行merge操作
5 git add
?? ?git add: 將工作區文件提交到暫存區
git add -A: 提交所有變化
?? ?git add -u: 提交被修改(modified)和被刪除(deleted)文件,不包括新文件(new)
?? ?git add .: 提交新文件(new)和被修改(modified)文件,不包括被刪除(deleted)文件
6 git commit
? ??Git commit -m?“ feat: 提交信息信息”:提交一次commit到存儲庫
? ? git commit - -amend 修改上一次commit信息/將本次修改amend到上一次commit
7?git push
???HEAD:當前commit的引用,可以使用HEAD代表當前引用
? ? git push origin local_branch:remote_branch: 將本地分支推送到遠程分支
? ? git push origin: 如果本地分支和遠程分支有綁定關系,可以省略分支名
? ? git push origin :staging <=> git push origin - -delete staging: 省略本地分支,相當于刪除遠程分支staging
? ? git push origin HEAD:staging: 將當前commit push到遠程origin服務器的staging分支
? ? git push -f origin HEAD:staging: 暴力推到遠程
? ? git push origin HEAD:refs/for/master: 進行代碼review
8 git branch
? ? ?git branch?-a : 查看本地和遠程所有分支
? ? ?git branch -d ?xx:刪除本地xx分支
? ? ?git branch -m old new: 重命名分支名字
? ? ?git branch -vv: 查看當前分支和關聯的遠程分支
9 git merge
git merge origin/master :合并origin/master分支到當前分支,自動進行新的提交
?? ?git merge - -no-commit origin/master:合并origin/master分支到當前分支,不自動進行新的提交
10 git rebase
?? ?git rebase origin/master: 合并origin/master到當前分支,以rebase的方式合并過來
?? ?git rebase - -contiue: 在rebase的過程中,如果有沖突會停止合并,解決沖突后,git add, 然后git rebase - -contiue就會繼續合并之后的
?? ?git rebase - -abort: 撤銷到rebase之前的狀態
git rebase -i:合并幾次commit為一個連接
? ????1 git rebase -i commitid:合并最新提交到commitid之前的提交為一次,commitid這次不合并;
? ? ? ? ?git rebase -i??HEAD~2: 合并最近兩次提交為一次commit;
? ? ? ? 2 會跳到vim界面,修改被合并的提交指令為:squash;
?? ?? ? ?指令含義:
?? ?? ? ?pick:保留該commit(縮寫:p)
?? ??? ??reword:保留該commit,但我需要修改該commit的注釋(縮寫:r)
?? ??? ??edit:保留該commit, 但我要停下來修改該提交(不僅僅修改注釋)(縮寫:e)
?? ??? ??squash:將該commit和前一個commit合并(縮寫:s),兩個注釋分成兩行。
?? ??? ??fixup:將該commit和前一個commit合并,但我不要保留該提交的注釋信息(縮寫:f),只保留前一個commit信息。
?? ??? ??exec:執行shell命令(縮寫:x)
?? ??? ??drop:我要丟棄該commit(縮寫:d)
?? ?? ? 3 如果有沖突解決沖突,修改完成之后,然后:
?? ?? ? ?Git add .
?? ?? ? ?git rebase - -contiue
?? ?? ? 4 git push -f HEAD:staging(git push -f前再次檢查git log)
11 git diff:
??????git diff: ?不加參數即默認比較工作區與暫存區
? ? git diff commitid commitid: ?比較兩次提交之間的差異
? ? git diff commitid [<path>]: ?比較工作區path路徑文件和指定提交之間的差異
? ? git diff HEAD [<path>]: ?比較工作區path路徑文件和最新本地庫之間的差異???
12 ?git show
????git show[commit]:# 顯示某次提交的元數據和內容變化
?? ?git show--name-only[commit]:顯示某次提交發生變化的文件
????git show[commit]:[filename]:顯示某次提交時,某個文件的內容
13 git log
? ? git log -p :查看每個更新之間的差異,按F下一頁比較
? ? git log -p -2: 查看最近兩個提交之間的差異
? ? git log - - author=liwenfeng: 查看author是liwenfeng的commit
? ? git log - - committer=liwenfeng:查看提交者是liwenfeng的commit
? ? git log - - grep=xx: 查看含關鍵字的提交
git log--pretty=oneline:只顯示commitID和備注消息
14 git stash
? ? git stash save -u?“暫時保存”:-u: 把工作區、暫存區和新建的文件全部暫存起來;
? ? git stash apply/?git stash apply stash@id: 將堆棧中最近一次改變回復到工作區,堆棧中保留這個stash提交
? ? git stash pop : ?將堆棧中最近一次改變回復到工作區,刪除堆棧中內容
? ? git stash list : ? 查看堆棧中的提交列表
? ? git stash show stash@{id} ?: 查看某次提交的內容
? ? git stash drop: ?刪除堆棧最近一次
? ? git stash drop stash@{id}: ?刪除指定id的一次內容
? ? git stash clear: ?清空堆棧列表
15 git revert
? ? git revert commitid:?生成一個新的commit,這個commit和上一次代碼剛好抵消
? ? git commit?—amend
? ? git push origin HEAD:refs/master
? ? git revert a^..c:? revert多次提交,按先后順序提交了a,b,c 想revert掉這三次提交
16 git reset
???git reset HEAD 1.txt:撤銷add到暫存區的文件
?? ?如果文件1.TXT已經被提交到緩存區,但是我后悔add這個文件,那么用這個命令撤銷對這個文件的add,此時這個文件回到工作區,如果還想回退某些修改,可以繼續用上面一條指令
?? ?(兩個下劃線之間沒有空格)
???git reset HEAD^(或commitid):默認使用git reset,不加任何參數就是這個,回退到上一個提交版本(指定提交版本),此時commit和暫存區被回退到和指定的一樣;
?git reset - -soft HEAD^(或commitid):回退到上一個提交版本(指定提交版本),此時只是回退了commit的信息,本地的源碼和暫存區和回退之前是一樣的;
?? ?git reset - -hard HEAD^(或commitid):往前回退到指定版本,源碼改變(所以,要慎用,可能回退之前修改的代碼會丟失,特使是回退之前沒有add和commit過,如果commit過,可以使用:git retlog查看歷史操作的
?? ?git reset - -mixed:此為默認方式,不帶任何參數的git reset,即時這種方式,它回退到某個版本,只保留源碼,回退commit和index信息commitid)
?17 git cherry-pick
?? ?git cherry-pick commitA : 把A分支上的commitA cherry到當前分支上來,并且在當前分支形成一個提交
? ??git cherry-pick commitid -n : 此時這個提交沒有自動提交到新分支
? ? 如果產出沖突,解決完沖突后:
? ? git cherry-pick - -contiue: 處理合并
? ? git cherry-pick - - abort: 取消cherry
? ? cherry多個commit,最方便操作是用ide上批量選擇
18 git remote
? ? ? ? ?git remote -v: 查看遠程倉庫情況「顯示:倉庫 ?url」
? ? ????git remote show origin : 查看遠程倉庫origin的詳細情況
? ? ????git remote add new_originhttps://github.com/xxx: ?添加遠程倉庫,新的倉庫名字是new_origin
? ? ????git remote rm origin: 移除遠程倉庫origin
? ? ? ? git branch -vv : 查看遠程倉庫分支情況
? ? ?????git push origin - -delelte xx_branch: 刪除遠程xx_branch分支????
19 git clean
git clean -n ?是一次clean的演習, 告訴你哪些文件會被刪除. 記住他不會真正的刪除文件, 只是一個提醒
?? ??git clean -f ?刪除當前目錄下所有沒有track過的文件. 他不會刪除.gitignore文件里面指定的文件夾和文件, 不管這些文件有沒有被track過
? ? ?git clean -f <path>?刪除指定路徑下的沒有被track過的文件
? ? ?git clean -df ?刪除當前目錄下沒有被track過的文件和文件夾
? ? ?git clean -xf?刪除當前目錄下所有沒有track過的文件. 不管他是否是.gitignore文件里面指定的文件夾和文件
20 git tag
? ? git tag: 查看所有標簽(按字母排序)
? ? git show tag1: 查看tag1的詳細信息
? ? git tag v1.0.0: 給當前commit(HEAD)打一個標簽
?? ?git tag v1.0.0 -m?“desc": 給當前commit(HEAD)打一個標簽,添加描述信息
? ? git tag v1.0.0 commitId: 給commitId這個commit打一個標簽
? ? git push origin v1.0.0: 把v1.0.0這個標簽推送到遠端
? ??git push origin - -tags: 推動本地所有標簽
? ? git tag -d v1.0.0: 刪除本地標簽
? ? git push origin :refs/tags/v1.0.0:刪除遠程標簽v1.0.0
21 git reflog
? ? git reflog:查看本地所有分支的操作
? ? 恢復已經被reset - -hard的代碼:git reset - -hard到上一次+git cherry-pick當前
git reflog: 查看記錄
https://cloud.tencent.com/developer/article/1413097
22 tig
? ? 1 快速把staged->unstage或是unstage ->staged
? ??? ? tig進入主界面后,j/k上下移動,選擇unstage后,回車,然后輸入u,則把所有unstage變為staged, staged->unstage同樣
?? ?? ? 單個文件的改變,tig進入log頁面后,輸入s, 查看status, j/k上下選擇一個文件,輸入u, 即可改變狀態
? ? 2 查看commit詳情
?? ?? ? tig進入主界面后,j/k上下移動選擇commit, 回車即可查看commit詳情,j/k上下選擇文件
? ? 3 快速查看不同分支代碼
?? ?? ? tig進入主界面后, 輸入r,即可看到不同的分支列表, 選中分支會回車,即可進入log界面, 選中分支后,shift+c即可切換分支? ??
Type 規范
type 用于說明 commit 的類別,必須為以下類型的一種:
* feat: 新的功能
* fix: 修復 bug
* docs: 只是文檔的更改
* style: 不影響代碼含義的更改 (例如空格、格式化、少了分號)
* refactor: 既不是修復 bug 也不是添加新功能的代碼更改
* perf: 提高性能的代碼更改
* test: 添加或修正測試
* chore: 對構建或者輔助工具的更改,例如生成文檔