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 remotegit 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 mastergit 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 initgit 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
