1. 程式人生 > >Git:常用命令

Git:常用命令

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

 

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

git config --global user.email "[email protected]"

安裝完Git應該做的第一件事就是設定使用者名稱與郵件地址後續每一個提交都會使用這些資訊。

Git配置用於控制Git外觀和行為配置3個層次,優先順序由大到小依次為:無選項(專案級,記錄於.git/config)、--global(使用者級,記錄於~/.gitconfig)、

--system(系統級,記錄於/etc/gitconfig

git config user.name
git config --list

檢視Git配置。列出的項可能有重複,但只最後一個生效。另外,如果一個配置沒有顯式設定,不會列在清單中。

Git使用預設文字編輯器,通常是Vim


git config --help

git help config

檢視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 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 checkout -b serverfix origin/serverfix

git checkout --track origin/serverfix

在遠端分支基礎上建立跟蹤分支,對應的遠端分支稱為上游分支。

 

git pull

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

 

git push origin --delete serverfix

刪除遠端分支