Git:經常使用命令

歡迎轉載,但請指明出處:https://www.cnblogs.com/zhizaixingzou/p/10241476.htmlhtml

 

下面的內容來自《Git Pro》的閱讀總結和實際操做。java

 

git config --global user.name "John Doe"git

git config --global user.email "johndoe@example.com"github

安裝完Git應該作的第一件事就是設置用戶名與郵件地址後續每個提交都會使用這些信息。數據庫

Git配置用於控制Git外觀和行爲配置3個層次,優先級由大到小依次爲:無選項(項目級,記錄於.git/config)、--global(用戶級,記錄於~/.gitconfig)、--system(系統級,記錄於/etc/gitconfig

git config user.name
git config --list服務器

查看Git配置。列出的項可能有重複,但只最後一個生效。另外,若是一個配置沒有顯式設置,不會列在清單中。編輯器

Git使用默認文本編輯器,一般是Vimfetch


git config --helpui

git help configspa

查看Git命令的幫助信息,如這裏是config

 

git init
該命令在須要被Git管理的項目目錄下執行項目目錄下會生成Git倉庫,但項目目錄下的文件還未被跟蹤(前一快照和暫存區域中都不存在)。

 

git clone https://github.com/chenjw13097/ProgramBricks.git

在當前目錄下建立一個ProgramBricks目錄做爲項目目錄(若是想在本地重命名項目名稱,能夠在克隆時於URI後面指定,此時項目目錄名就再也不是默認的了),併爲它初始化一個Git倉庫而後自動將其添加爲遠程倉庫並以origin」 爲簡寫接着從遠程倉庫抓取全部數據到倉庫,設置本地分支master跟蹤遠程origin/master分支,同時合併origin/master分支內容到本地master分支,最後檢出master分支最新版本的快照到工做目錄

git clone file://C:/Users/phewy/Desktop/test01

上面的test01是項目目錄。克隆的結果是在當前目錄下會出現一個項目目錄test01

 

git status

查看狀態,會列出未跟蹤文件、已修改文件、已暫存文件、因包含合併衝突而處於未合併狀態的文件,也列出當前所在分支。

同一文件能夠既是已修改狀態,也是已暫存狀態。此時git add則將追加暫存已修改狀態的部分。但提交後,只會出現一次變更,而不會分拆爲兩次變更

 

git add client.java

若是文件未被跟蹤,則跟蹤指定的文件(若是給的是目錄則遞歸跟蹤目錄下的全部文件)存入暫存區域
若是文件處於已修改狀態,則暫存。

若是文件合併時衝突,則解決衝突後標記文件爲衝突已解決,接下來就能夠提交。
綜合幾種狀況,它能夠理解爲「添加內容到下一次提交中」

 

*.[oa]

!lib.a

*.class

*.~

a/**/h

doc/*.docx

ppt/**/*.ppt

/file.txt

build/

.gitignore文件指定須要排除在Git管理以外的文件的模式。該文件在項目目錄下建立#開頭的行是註釋行,空行被忽略。

 

git diff
查看修改以後尚未暫存起來的變化部分
git diff --cached
git diff --staged
查看暫存起來的相對於上一次提交的變化部分

 

git commit

這種方式會啓動文本編輯器以便輸入本次提交的說明。

提交時記錄的是放在暫存區域的快照。

每一次運行提交操做,都是對項目做一次快照。

git commit -m 「initial project.」

此法提交則直接在後部分輸入提交說明。

git commit -a -m 'added new benchmarks'

該命令能夠直接提交已修改狀態和已暫存狀態的文件,但不包含未跟蹤文件

 

rm README.MD

git rm README.MD

git commit -m 「deleted README.MD.」

這樣之後,文件就再也不被git管理工做目錄中也沒有了它

 

git add file03

git commit --amend [-m "update last commit"]
可修改屢次,但是修改最後一條提交

提交的時間仍是上次提交的時間,amend只是覆蓋了它的內容,包括新文件或新提交說明。

 

git rm --cached README

git commit -m 「did not track README.MD again.」

這樣之後,文件就再也不被git管理,但工做目錄尚有該文件,只是未跟蹤。

若是在刪除前文件爲已修改或已暫存,則這些修改都保留在未跟蹤文件中。

若是在刪除前文件同時爲已修改和已暫存,則必須「git rm -f --cached README」,這些修改合併後保留在未跟蹤文件中。

 

git mv file01 file02

git commit -m 「rename file01 to file02」

重命名文件但此時文件的提交歷史,徹底重新開始。

 

git log
git log --pretty=format:"%h - %an : %s"
git log --since=2.weeks

查看提交歷史。

使用它能夠統計出開發者的相關操做。

git log --no-merges issue54..origin/master

顯示origin/master相對於issue54沒有合併部分的提交的日誌信息。

 

git reset HEAD CONTRIBUTING.md
撤銷暫存
git checkout -- CONTRIBUTING.md
撤銷修改。這個命令會刪除修改,須要謹慎,由於它至關於undo,但卻沒有對應的redo

 

git remote

列出已添加的全部遠程倉庫的簡寫。

若是是初始化倉庫,則沒有遠程倉庫。

若是你已經克隆了倉庫,那麼至少應該能看到 origin,它是克隆源倉庫的默認名。

git remote -v

列出已添加的全部遠程倉庫的簡寫與其對應的URL

咱們能夠輕鬆拉取其中任何一個遠程倉庫上其餘用戶的貢獻。

git remote show origin

查看遠程倉庫的詳細信息。

 

git remote add pb https://github.com/paulboone/ticgit

添加一個新的遠程Git倉庫,並制定簡寫。

添加的遠程Git倉庫當與本地倉庫有共同的至少是第一個提交對象,也就是說來自同一個項目。

 

git fetch pb

從遠程倉庫抓取全部本地倉庫尚未的數據。

執行完成後,你將會擁有那個遠程倉庫中全部分支的引用pb/master

它並不會自動合併或修改你當前的工做。

 

git remote rename pb paul

從新命名遠程倉庫的簡寫,那些過去引用 pb/master 的如今會引用 paul/master

 

git remote rm paul

移除遠程倉庫。

 

git tag v1.4-lw

建立輕量標籤。

輕量標籤本質上是將提交校驗和存儲到一個文件中,沒有保存任何其餘信息。

 

git tag -a v1.4 -m 'my version 1.4'

-a,代表這是一個附註標籤。

-m 選項指定了標籤說明信息,若是沒有會啓動編輯器提示輸入。

附註標籤是存儲在Git數據庫中的一個完整對象。包含打標籤者的名字、電子郵件地址、日期時間說明信息,也可使用GPG簽名與驗證。

Git能夠給歷史中的某一個提交打上標籤,以示重要。 比較有表明性的是人們會使用這個功能來標記發佈版本

 

git tag -a v1.2 9fceb02

在提交打標籤,你須要在命令的末尾指定提交的校驗和(或部分校驗和)。

 

git tag

以字母順序列出全部標籤的名稱

git tag -l 'v1.8.5*'

模糊匹配獲得標籤的名稱列表

 

git show v1.4

查看標籤詳細信息。

 

git push origin v1.5

git push origin --tags

默認狀況下,git push 命令並不會傳送標籤到遠程倉庫服務器上。

指定標籤或全部標籤傳送到遠程倉庫服務器上。

當其餘人從倉庫中克隆或拉取,他們也能獲得你的那些標籤。

 

git checkout -b develop v2.0

在特定標籤上建立一個分支,並切換到該分支。

 

git config --global alias.ci commit

git config --global alias.unstage 'reset HEAD'

別名是原樣替換不管是否有空格

 

git branch testing

建立一個分支。該分支與當前分支指向同一個提交對象。

 

git checkout testing

切換分支。

若是當前有已修改或已暫存文件未提交,切換分支是切不了的。

工做目錄中的文件所有變爲該分支最後一個提交時的狀態。

HEAD始終指向當前分支,能夠看作是它的別名切換分支就是使HEAD的值等於指定的分支

 

git checkout -b iss53

建立並切換到目標分支

 

git checkout master

git merge hotfix

hotfix分支內容合併到master分支。

遠程分支拉取後也能夠直接合併到當前分支。

合併的另外一種方法是使用變基,但分享了某個分支,對它執行變基操做就會有風險考慮到除了提交歷史更線性化些,它能完成的工做merge都能完成,因此筆者選擇忘掉變基。

 

git branch -d hotfix

刪除分支。

沒有合併到其餘分支的分支默認是刪不掉的,須要使用-D選項強制刪除它。

 

git branch

查看本地分支名稱和當前分支。

 

git branch --merged

查看哪些分支已經合併到當前分支。

 

git branch --no-merged

查看全部包含未合併工做的分支。

 

git branch -vv

查看本地分支與遠程分支的跟蹤關係。

 

git push origin serverfix

git push origin serverfix:serverfix

git push origin refs/heads/serverfix:refs/heads/serverfix

推送本地分支到遠程倉庫上去,在遠程倉庫上的分支名也爲serverfix,本地分支跟蹤了它

有寫入權限才能推送到遠程倉庫上。

下一次其餘協做者從服務器上抓取數據時,他們會在本地生成一個遠程分支origin/serverfix能夠運行 git merge origin/serverfix 將這些工做合併到當前所在的分支。

推送上去後,本地分支也自動成爲遠程分支的跟蹤分支,下次推送時必須以前沒有人推送過期,這條命令才能生效。若是有人推送過了,你必須先將他們的工做拉取下來並將其合併進你的工做後才能推送。

git push -u origin featureA

將本地分支featureA推送到遠程origin上,新建分支名字也叫featureA,事先不存在。

git push -u origin featureB:featureBee

將本地分支featureB推送到遠程origin上featureBee,featureB沒有跟蹤過featureBee。

 

git checkout -b serverfix origin/serverfix

git checkout --track origin/serverfix

在遠程分支基礎上創建跟蹤分支,對應的遠程分支稱爲上游分支。

 

git pull

在一個跟蹤分支上,Git能自動地識別去哪一個服務器上抓取數據,並合併到哪一個分支。

 

git push origin --delete serverfix

刪除遠程分支

相關文章
相關標籤/搜索