git常用命令總結
git配置相關命令
配置相關的命令都使用git config
開始。詳細請參看git config --help
.常用到的git配置命令如下:
- 查看git所有配置項
git config -l
或git config --list
- 直接修改配置文件
git config -e --global
:此命令會調出配置文件。
- 郵箱和用戶名配置
- 配置全局的郵箱和用戶名
git config --global user.name "user name"
git config --global user.email "xxx@nnn.com"
- 為某個項目配置本地的郵箱和用戶名
git config user.name "user name"
git config user.email "xxx@nnn.com"
- 配置全局的郵箱和用戶名
- 設置編輯器
git config --global core.editor "path/\notepad++.exe -multiInst -notabbar -n"
git遠程倉庫相關的命令
遠程相關的命令都使用git remote
開始。詳細請參看git remote --help
.常用到的遠程命令如下:
當我們使用git clone
克隆遠程倉庫時,git會自動創建一個遠程倉庫名origin
.與遠程倉庫的URL連接。自動把本地的master分支和遠程的master分支對應起來了。
- 查看遠程庫的名字與信息
git remote
git remote -v
:顯示更詳細的信息。包括URLgit remote show <remote_name>
:查看某個遠程倉庫詳細信息。包括跟蹤的分支信息。
- 添加遠程庫
git remote add <name> <url>
:name表示為遠程倉庫分配的名稱,url為遠程倉庫的地址。
- 遠程倉庫重命名
git remote rename <oldname> <newname>
:
- 刪除添加的遠程庫
git remote remove name
git克隆相關命令
git使用git clone
命令進行倉庫的克隆。常用命令參數如下:
-o name
:使用指定的name代替origin名。-b branch_name
:克隆指定的分支。--single-branch
:只克隆指定分支。配合-b
選項使用--depth=n
:克隆的深度,克隆最近n次的commit.
常用clone例程:
git clone git@git.n.xxx.git
:克隆遠程倉庫所有內容。git clone git@git.n.xxx.git newname
:克隆遠程倉庫所有內容並指定新名稱。
git分支相關的命令
- 查看倉庫的分支信息
git branch
:查看所有本地分支.當前分支前面會標一個*
。常用參數如下:-a
:查看所有的分支,包括遠程分支-v
:查看分支指向的commit-vv
:查看本地分支與遠程分支的匹配關系--merged
:查看合並的分支--no-merged
:查看沒有合並的分支
- 創建分支
git branch <branch name>
:在當前提交上創建一個分支git branch <branch name> <base_name>
:基於指定的某個commit或者分支創建分支。base_name為commit號或分支名。
- 切換分支
git checkout <branch name>
git checkout -b <branch name>
:創建並切換(當分支已經存在時切換不了)git checkout -b dev origin/dev
:創建本地的dev分支並與遠程的origin/dev分支連接。
- 刪除分支
git branch -d <branch name>
:刪除指定分支.-D
為強制刪除
- 如果您已經有一個本地分支,並希望將其設置為剛剛下拉的遠程分支,或者希望更改正在跟蹤的上游分支
git branch --set-upstream-to=origin/<branch> dev
--set-upstream-to
與-u
同義。
git提交相關的命令
- 查看倉庫文件的狀態
git status
:查看詳細狀態,有下面一些描述狀態。- nothing to commit, working tree clean:所有的更改都已經提交到本地倉庫了。
- no changes added to commit:更改了文件,但沒有存放到暫存區(沒有執行
git add
命令) - Changes to be committed:對更改文件做了緩存,但沒有提交。
git status -s
,git status -short
??
:未跟蹤a
:未跟蹤文件使用git add
命令添加到暫存區時標記此狀態。M
:修改。即對文件進行了修改,但未使用git add
命令添加到暫存區。MM
:同時處於修改階段和暫存階段。即已經使用git add
命令添加到暫存區,然后又進行了修改。
- 將文件添加到暫存區
git add filename
。filename 可以是.
,代表所有文件。也可以是表達式如*.c
,代表所有的c文件。
- 將文件提交到本地倉庫。命令為
git commit
,常用選項如下:-m "message"
.message為提交時的說明信息。可以使用"message. Ref #xxx"
格式綁定issue。-v
:提交時可以查看詳細的修改信息。-a
:自動將工作區中的內容添加到暫存區,然后提交。-s
:提交時添加提交者信息。--amend
:修改本地某次的提交信息.
git對比文件相關的命令
git diff
命令用於比較文件之間的不同。常見選項如下
- 直接使用
git diff
:比較工作區與暫存區的各個文件區別 - 比較暫存區與最后一次提交的區別
git diff --staged
- 比較兩次提交之間的差異
git diff [commit1]...[commit2]
git log日志相關的命令
git log
用於查看提交日志
- 直接使用
git log
:列出所有歷史記錄,最近的排在最上方.q
退出。-p
:(patch)列出每個commit不同的詳細信息。-n
:顯示前n條.-stat
:查看概要--no-merges
:防止顯示合並提交--since
:指定查看時間。如兩天前的提交歷史git log --since=2.days
--author
:指定作者。如指定作者為"BeginMan"的所有提交git log --author=BeginMan
--grep
:指定關鍵字。如指定關鍵字為“init”的所有提交git log --grep=init
--committer
:指定提交者。如指定提交者為"Jack"的所有提交git log --committer=Jack
--pretty
:指定顯示格式。如每個提交信息顯示一行。git log --pretty=oneline
- 選項可以是oneline,short,medium,full,fuller,email,raw以及format。詳見progit文檔。34頁。
-S
:通過查詢文件的變更內容來檢索出指定提交日志.如git log -S xxx
。
git log [-option] filename
:查看指定文件的log日志。filename也可以是分支名。如果分支名與文件名相同,系統會提示錯誤,可通過–
選項來指定給定的參數是分支名還是文件名git log --oneline --decorate
:查看分支與commit的關系
回退/撤銷等操作命令
git reset
用於回退相關操作。reset的三種方式:
介紹詳見:https://www.jianshu.com/p/c2ec5f06cf1a
-
git reset --hard HEAD^
:將工作區,暫存區、倉庫全都恢復到上一個版本。主要用於放棄本地所有的修改。 -
git reset --soft HEAD^
:只將倉庫恢復到上一個版本,工作區和暫存區的內容不變。這個功能主要用來合並多個commit. -
git reset --mixed HEAD^
:(reset的默認方式)。將倉庫和暫存區恢復到上一個版本,工作區內容不變。 -
git reset HEAD^
:回退所有內容到上一個版本 -
git reset HEAD^ a.py
:回退a.py這個文件的版本到上一個版本 -
git reset –soft HEAD~3
:向前回退到第3個版本 -
git reset –hard origin/master
:將本地的狀態回退到和遠程的一樣 -
git reset 057dcc
:回退到某個版本 -
git revert HEAD
:回退到上一次提交的狀態,按照某一次的commit完全反向的進行一次commit -
git reset HEAD CONTRIBUTING.md
:將緩沖區的內容撤回到工作區 -
git checkout -- filename
:撤銷工作區中被修改的內容.用於文件還沒有執行git add
之前的修改。
git向遠程倉庫提交相關命令
-
向遠程分支推送.
git push <遠程倉庫名> <本地分支名>:<遠程分支名>
:這里的:
前后是必須沒有空格的。- 如果省略遠程分支名,則表示將本地分支推送與之存在"追蹤關系"的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建.如
git push origin master
. - 如果省略本地分支名,則表示刪除指定的遠程分支,因為這等同於推送一個空的本地分支到遠程分支。如
git push origin :master
.它等同於git push origin --delete master
- 常見選項如下:
-u remote_name
:如果當前分支與多個主機存在追蹤關系,則可以使用 -u 參數指定一個默認主機,這樣后面就可以不加任何參數使用git push.--force
:強制推送。--force-with-lease
:沒有人在上游更新分支內容,時才可以強制推送。--all
:不管是否存在對應的遠程分支,將本地的所有分支都推送到遠程主機.--delete
:用於刪除某個遠程分支。如git push origin --delete <branch_name>
。
- 默認只推送當前分支.
- 如果省略遠程分支名,則表示將本地分支推送與之存在"追蹤關系"的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建.如
-
從遠程分支拉取
git fetch <remote> <branch>
:將遠程倉庫拉取到本地。如git fetch origin master
git pull <remote> <branch>
:從遠程獲取最新版本並merge到本地。如git pull origin master
使用--force
或--force-with-lease
強制向master
分支推送時可能依然會報錯(You are not allowed to force push code to a protected branch on this project.)這是由於gitlab等服務器設置了主分支保護造成的。可以在"Settings" -> “Repository” -> scroll down to “Protected branches”.取消。
如果使用http url推送,每次提交時都會要求輸入用戶名和密碼,為了方便,可以使用git config --global credential.helper cache
來緩存。
git合並相關的命令
- 合並:
git merge --no-ff -m "merged bug fix 101" issue-101
- –no-ff:表示普通合並。
git merge --abort
:終止合並
合並流程:以A分支向B分支合並為例。
- 切換到B分支目錄。
git checkout B
. - 確保B分支是干凈的。
- 合並
git merge A
- 如果有沖突需要解決沖突。然后commit.
- 使用
git log
查看合並結果
rebase(變基)
變基使得提交歷史更加整潔。你在查看一個經過變基的分支的歷史記錄時會發現,盡管實際的開發工作是並行的,但它們看上去就像是先后串行的一樣,提交歷史是一條直線沒有分叉。
git rebase master
:將當前分支變基到maser分支上
git rebase -i HEAD~3
git雜項命令
git help <cmd>
:獲取命令的詳細幫助git add -h
:獲取add命令的簡單幫助git rm filename
:刪除某個文件。filename可以是表達式。如//*前必須要有\ git rm log/\*.log
- 1
- 2
git rm --cached filename
將某個文件從暫存區踢出。使其不受版本管理,這個文件仍然存在於工作區。git mv file_from file_to
:移動文件
git 將修改內容暫存
git stash
:把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作.git stash pop
:恢復的同時把stash內容也刪了.git stash list
git子模塊的使用
子模塊簡單的說就是項目需要包含並使用另一個項目。子模塊允許你將一個git倉庫作為另一個git倉庫的子目錄。它能讓你將另一個倉庫克隆到自己的項目中,同時還保持提交的獨立。
將一個已存在的git倉庫添加為正在工作的倉庫的子模塊:
git submodule add myproject_url.git
- 默認情況下,子模塊會將子項目放到一個與倉庫同名的目錄中。如果你想要放到其他地方,那么可以在命令結尾添加一個不同的路徑。如:``.
- 執行此命令后,會生成一個
.gitmodules
的文件,保存着模塊的相關信息。
克隆含有子模塊的倉庫:
- 如果我們已經clone了項目,但沒有包含子模塊內容時,使用如下命令:
git submodule init
git submodule update
- 當然,可以選擇在clone項目同時clone子模塊,如下
git clone --recurse-submodules myproject_url.git
tag標簽
git tag
:查看所有標簽(默認為按字母順序排序)
git tag -l "v1.8.5*"
:查看感興趣的分支
git tag -a v1.4 -m "my version 1.4"
:創建標簽
-a:表示帶注釋的標簽
git支持兩種類型的tag:
- lightweight:類似分支,不能修改
- annotated:帶注釋的tag
git push origin --tags
:推送標簽到remote
git checkout tag
:檢出標簽
git checkout -b version2 v2.0.0
:基於某個標簽創建分支
git運行外部命令,用別名包裝,外部命令用!
修飾
git config --global alias.visual '!gitk'
git相關文件介紹
每個倉庫都有一個.git
的文件,用來管理倉庫。
config文件
config
文件:存儲倉庫的配置信息,里面包含了倉庫的遠程地址,分支等信息。
gitignore文件
.gitignore
文件可以有多個,每個此文件只負責它一個它的子目錄。
支持正則表達式
[abc]
:匹配括號中的任何字符。如a
,b
,c
.
?
:匹配單個任意字符
*
:跨多個路徑
**
:匹配多個任意字符
[0~9]
:匹配一個范圍
!
:不包括某個文件
eg:
*.a
!lib.a
/TODO
build/
doc/*.txt
doc/**/*.pdf
- 1
- 2
- 3
- 4
- 5
- 6