$ cat .git/HEAD
ref: refs/heads/master
執行 git checkout test
$ cat .git/HEAD
ref: refs/heads/test
手動編輯此文件,但同樣可以執行更安全的命令:
執行symbolic-ref
$ git symbolic-ref HEAD
refs/heads/master
設置HEAD:
$ git symbolic-ref HEAD
refs/heads/test
$ cat .git/HEAD
ref: refs/heads/test
.git / config文件中添加遠端origin的名稱,遠程存儲庫的URL以及用於獲取的refspec
[remote "origin"] url = https://github.com/schacon/simplegit-progit fetch = +refs/heads/:refs/remotes/origin/
如果想一次性執行某些操作,也可以在命令行中指定refspec
$ git fetch origin master:refs/remotes/origin/mymaster
指定多個refspec
$ git fetch origin master:refs/remotes/origin/mymaster \ topic:refs/remotes/origin/topic From git@github.com:schacon/simplegit ! [rejected] master -> origin/mymaster (non fast forward) * [new branch] topic -> origin/topic
刪除refspec
git push origin :topic
git push origin -- delete topic
Transfer Protocols--傳輸協議
Git可以透過兩種主要方式在兩個倉儲之間傳輸數據:“啞吧”協議與“智能”協議。本章重點著重於介紹這兩個主要協議的運作方式。
The Dumb Protocol--啞巴協議
該協議稱為“啞巴協議”,是因為它在傳輸過程中不需要服務端的Git特定代碼; 獲取過程是一系列HTTP GET
請求,使用者可以自由的呈現Git倉儲的安排。
本章重點在介紹Git內部的維護和數據的恢復,有時Git會自動執行一個名為“auto
當需要恢復檔案時可使用git long和git master兩個指令來進行恢復。
Git在bash
shell中運行,並使用許多shell環境變量來確定它的行為方式。
GIT_EXEC_PATH:可透過運行檢查當前設置
git --exec-path
。
HOME:它是Git查找全局配置文件的地方。
GIT_CONFIG_NOSYSTEM:如果您的系統配置干擾了您的指令,但是您無權更改或刪除它,這將非常有用。
設置提交者的名字: GIT_COMMITTER_NAME
“提交者”字段的電子郵件地址: GIT_COMMITTER_EMAIL
用於“提交者”字段中的日期: GIT_COMMITTER_DATE
功能很強的系統工具-Git
可以輕鬆使用它作為VCS。本章介紹了許多管道指令 - 這些指令使用戶在使用上更家簡單。
git config
該git config
命令幾乎已在本書的每一章中使用
在初次設置Git中,我們在開始使用Git之前用它來指定我們的名字,電子郵件地址和編輯器首選項
git init
我們使用此命令在“將空白倉儲放到服務器上”中為服務器創建一個空的空白倉儲。
gitstatus
該
git status
命令將顯示工作目錄和暫存區域中文件的不同狀態。哪些文件已修改和未分階段,哪些文件已暫存但尚未提交。
在它的正常形式中,它還將向您展示如何在這些階段之間移動文件的一些基本提示。
git diff
當您想要查看任意兩棵樹之間的差異時,將使用該命令。
這可能是您的工作環境和臨時區域(單獨git diff
),暫存區域和上次提交(git diff --staged
)之間,或兩個提交(git diff master branchB
)之間的差異。
git difftool
只是啟動一個外部工具,以顯示兩棵樹之間的區別,以防您想使用內置
git diff
命令之外的其他內容。
git reset
主要用於撤消操作,您可以通過動詞來判斷。它在HEAD
指針周圍移動並可選地更改index
或暫存區域,如果使用,還可以選擇更改工作目錄。
如果使用不當,此最終選項可能會導致此命令丟失,因此請確保在使用之前了解它。
git rm
用於從登台區域和Git的工作目錄中刪除文件。它類似於
git add
它為下一次提交分階段刪除文件。
git mv
是一個簡單的便捷命令,用於移動文件,然後git add
在新文件和git rm
舊文件上運行。我們只在移動檔案中簡要提一下這個命令。
git mergetool
命令只是啟動一個外部合併幫助程序,以防您在Git中遇到合併題。git tag
命令用於為代碼歷史記錄中的特定點提供永久書籤。通常,這用於發布容。git fetch
命令與遠程存儲庫通信,並獲取該存儲庫中當前不存在的所有信息,並將其存儲在本地數據庫中。git remote
命令是用於記錄遠程存儲庫的管理工具。它允許您將長URL保存,例如“origin”,這樣您就不必一直輸出它們。您可以使用其中的幾個,該git remote
命令用於添加,更改和刪除它們。git archive
命令用於創建項目特定快照的存檔文件。我們git archive
用來創建一個項目的tarball,用於在準備釋出一個版本中進行共享。git submodule
命令用於管理正常存儲庫中的外部存儲庫。這可能適用於庫或其他類型的共享資源。該submodule
命令具有若干子命令(add
,update
,sync
,等),用於管理這些資源。git show
命令可以以簡單且可讀的方式顯示Git對象。通常,您可以使用它來顯示有關標記或提交的信息。git shortlog
命令用於匯總輸出git log
。該命令將採用許多相同的選項,git log
但它不會列出所有提交,而是顯示按作者分組的提交的摘要。(有工具可以解決圖形衝突)
外部合併和差異工具
您可以設置一個外部工具,來自動解決圖形衝突,而不必手動解決。
強制視覺合併工具" (P4Merge) 來執行差異和合併解析度, 因為它是一個不錯的圖形工具, 並且是免費的。
Git 屬性資料還允許您在匯出專案存檔時執行一些有趣的操作。
您可以告訴 Git 在生成存檔時不要匯出某些檔或目錄。如果有一個子目錄或檔不希望包含在存檔檔中, 但您確實希望簽入專案, 則可以通過export-ignore確定這些檔。
例如, 假設您在test/子目錄中有一些測試檔案, 而將它們包含在專案的 tarball 匯出中是沒有意義的。您可以將以下行添加到 Git 屬性檔中:
test/ export-ignore
合併策略
您還可以使用 Git 屬性告訴 Git 對專案中的特定檔使用不同的合併策略。一個非常有用的選擇是告訴 Git 不要嘗試合併特定的檔時, 他們有衝突, 而是使用你的一方合併超過別人的。
如果專案中的分支存在分歧或是專用的, 但您希望能夠將更改合併回其中, 並且希望忽略某些檔, 這將很有説明。假設您有一個名為database.xml " 的資料庫設置檔, 該檔在兩個分支中是不同的, 並且您希望在不弄亂資料庫檔案的情況下合併到其他分支中。
教你一些鉤子的用法並告訴妳這些能尬麻? 使用鉤子來檢查提交消息是否符合所需的模式等等…..
前4種掛鉤與提交過程有關
注意: 此腳本無法停止推送過程, 但用戶端在完成之前不會斷開連接, 因此, 如果您嘗試執行任何可能需要很長時間的操作, 請務必小心。
交互式暫存
運行git add時使用-i或者--interactive選項,Git將會進入一個交互式終端模式
$ git add -i
暫存與取消暫存文件
在如果What now>提示符後鍵入2或u,腳本將會提示想要暫存哪個文件
Update>> 1,2
如果在Update>>提示符後不輸入任何東西並直接按回車,Git將會暫存之前選擇的文件
要取消暫存TODO文件,使用3或r(撤消)選項