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)、
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
刪除遠端分支。