Git保證完整性
- Git 中所有數(shù)據(jù)在存儲(chǔ)前都計(jì)算校驗(yàn)和晓勇,然后以校驗(yàn)和來(lái)引用缀皱。SHA-1散列(hash, 哈希). 這是一個(gè)由40個(gè)十六進(jìn)制字符組成的字符串,基于 Git 中文件的內(nèi)容或目錄結(jié)構(gòu)計(jì)算出來(lái)塘雳。
- Git 數(shù)據(jù)庫(kù)中保存的信息都是以文件內(nèi)容的哈希值來(lái)索引氏捞,而不是文件名。
初次運(yùn)行Git前的配置
- 設(shè)置用戶(hù)信息
$ git config --global user.name "#NAME#"
$ git config --global user.email #NAME@example.com#
獲取Git倉(cāng)庫(kù)
在現(xiàn)有目錄中初始化倉(cāng)庫(kù)
若需使用Git來(lái)對(duì)現(xiàn)有的項(xiàng)目進(jìn)行管理株汉,只需進(jìn)入該目錄并輸入:
$ git init
該命令將創(chuàng)建一個(gè)名為.git的子目錄
克隆現(xiàn)有的倉(cāng)庫(kù)
$ git clone #url#
這會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)需要克隆的倉(cāng)庫(kù)的目錄筐乳,并在這個(gè)目錄下初始化一個(gè) .git 文件夾,從遠(yuǎn)程倉(cāng)庫(kù)拉取的所有數(shù)據(jù)放入 .git 文件夾乔妈,然后從中讀取最新版本的文件的拷貝蝙云。
記錄每次更新到倉(cāng)庫(kù)
檢查當(dāng)前文件狀態(tài)
$ git status
$ git status -s
跟蹤新文件
git add 命令可以用來(lái)開(kāi)始跟蹤新文件,也可以把已跟蹤的文件放到暫存區(qū)路召,還可用于合并時(shí)把有沖突的文件標(biāo)記為已解決狀態(tài)等勃刨。將這個(gè)命令理解為 ‘添加內(nèi)容到下一次提交中’ 而不是 ‘將一個(gè)文件添加到項(xiàng)目中’ 要更加合適。
$ git add #FILE#
暫存已修改的文件
修改一個(gè)已被跟蹤的文件股淡,運(yùn)行 git status 命令后身隐,這個(gè)文件將出現(xiàn)在 Changes not staged for commit 這行下面,說(shuō)明已跟蹤文件的內(nèi)容發(fā)生了變化唯灵,但是還沒(méi)有放到暫存區(qū)贾铝。要暫存這次更新,需要運(yùn)行 git add 命令埠帕。文件放到暫存區(qū)后垢揩,假設(shè)此時(shí),再修改這個(gè)文件敛瓷,重新編輯后叁巨,再運(yùn)行 git status 將會(huì)發(fā)現(xiàn)這個(gè)文件同時(shí)出現(xiàn)在暫存區(qū)和非暫存區(qū)。原因是Git只不過(guò)暫存了運(yùn)行 git add 時(shí)候的版本呐籽,需要再次運(yùn)行 git add 把最新版本重新暫存起來(lái)锋勺,然后 git commit.
忽略文件
可以創(chuàng)建一個(gè)名為 .gitignore 的文件,列出要忽略的文件模式绝淡。
$ cat .gitignore
$ *.[oa]
$ *~
查看已暫存和未暫存的修改
- 若要知道具體修改了文件的什么地方宙刘,可以用 git diff 命令。
- 不帶參數(shù)的 git diff 可以直接查看尚未暫存的文件更新了哪些部分牢酵。
- 若要查看已暫存的將要添加到下次提交里的內(nèi)容悬包,可以用 git diff --cache 或者 git diff --staged
提交更新
$ git commit -m "#DESCRIPTION#"
跳過(guò)使用暫存區(qū)域
- 給 git commit 加上 -a 選項(xiàng),Git就會(huì)自動(dòng)把所有已經(jīng)跟蹤過(guò)的文件暫存起來(lái)一并提交馍乙,從而跳過(guò) git add 步驟.
$ git commit -a
移除文件
- 從Git中移除某個(gè)文件布近,就必須要從已跟蹤文件清單中移除垫释,然后提交。手動(dòng)移除文件后需要再運(yùn)行 git rm 記錄此處移除文件的操作撑瞧。
- 當(dāng)我們想把文件從Git倉(cāng)庫(kù)中移除(即從暫存區(qū)域移除), 但仍然希望保留在當(dāng)前工作目錄棵譬,只是不希望Git繼續(xù)跟蹤≡に牛可以使用 --cached 選項(xiàng)订咸。
$ git rm --cached #FILE#
- 刪除以 suffix 結(jié)尾的所有文件
$ git rm \*#suffix#
移動(dòng)文件
- 在Git中對(duì)文件改名
$ git mv #FILE_FROM# #FILE_TO#
- 實(shí)際上 git mv 相當(dāng)于運(yùn)行了下面3條命令:
$ mv #FILE_FROM# #FILE_TO#
$ git rm #FILE_FROM#
$ git add #README#
查看提交歷史
- -p 選項(xiàng)用來(lái)查看提交文件的差異,-2 選項(xiàng)用來(lái)查看最近兩次提交日志酬诀。 --stat 可以查看每次提交的簡(jiǎn)略統(tǒng)計(jì)信息脏嚷。
$ git log -p -2
- 定制要顯示的記錄的格式
$ git log --pretty=format:"%h - %an, %ar : %s"
撤銷(xiāo)操作
- 當(dāng)提交到暫存區(qū)后發(fā)現(xiàn)忘記提交部分文件或者想要修改提交信息時(shí),可以運(yùn)行 -amend 重新提交瞒御,這將代替第一次提交的結(jié)果父叙。
$ git commit --amend
取消暫存的文件
- 將暫存的文件改為非暫存狀態(tài)。
$ git reset HEAD #FILE#
撤銷(xiāo)對(duì)文件的修改
- 將已修改的文件還原為上次提交的樣子肴裙。
$ git checkout -- #FILE#
遠(yuǎn)程倉(cāng)庫(kù)的使用
查看遠(yuǎn)程倉(cāng)庫(kù)
$ git remote -v
添加遠(yuǎn)程倉(cāng)庫(kù)
- 添加一個(gè)遠(yuǎn)程倉(cāng)庫(kù)趾唱,同時(shí)指定一個(gè)可以輕松引用的簡(jiǎn)寫(xiě):
$ git remote add #shortname# #url#
從遠(yuǎn)程倉(cāng)庫(kù)中抓取與拉取
- 使用 fetch 執(zhí)行完后,將可以擁有那個(gè)遠(yuǎn)程倉(cāng)庫(kù)中所有分支的引用蜻懦,可以隨時(shí)合并或查看甜癞。
$ git fetch #remote-name#
推送到遠(yuǎn)程倉(cāng)庫(kù)
$ git push #REMOTE-NAME# #BRANCH-NAME#
查看遠(yuǎn)程倉(cāng)庫(kù)更多信息
$ git remote show #REMOTE-NAME#
遠(yuǎn)程倉(cāng)庫(kù)的移除與重命名
$ git remote rename #OLD_NAME# #NEW_NAME#
$ git remote rm #REMOTE_NAME#
打標(biāo)簽
列出標(biāo)簽
$ git tag
$ git rag -1 'v1.8.5*'
創(chuàng)建標(biāo)簽
- 標(biāo)簽類(lèi)型: 輕量標(biāo)簽(lightweight)、附注標(biāo)簽(annotated)
附注標(biāo)簽
$ git tag -a v1.0 -m 'SOME MESSAGE'
- 查看標(biāo)簽信息
$ git show v1.0
輕量標(biāo)簽
- 輕量標(biāo)簽沒(méi)有保存其他信息
$ git tag v1.0
后期打標(biāo)簽
- 對(duì)過(guò)去的提交打標(biāo)簽宛乃,在命令的末尾指定提交的校驗(yàn)和(或部分校驗(yàn)和)
$ git tag -a v1.0 #SHA-1#
共享標(biāo)簽
- 默認(rèn)情況下带欢,git push 命令并不會(huì)傳送標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器上,在創(chuàng)建完標(biāo)簽后必須顯示的推送標(biāo)簽到共享服務(wù)器上烤惊。
git push origin v1.5
- 若想一次性推送很多標(biāo)簽,可以使用帶有 --tags 選項(xiàng)的 git push 命令吁朦。這將會(huì)把所有不再遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器上的標(biāo)簽全部傳送到那里柒室。
$ git push #origin# --tags
檢出標(biāo)簽
- 在 Git 中不能真的檢出一個(gè)標(biāo)簽,標(biāo)簽并不能像分支一樣來(lái)回移動(dòng)逗宜。若想工作目錄與倉(cāng)庫(kù)中特定的標(biāo)簽版本完全一樣雄右,可以在特定的標(biāo)簽上創(chuàng)建一個(gè)新分支.
$ git checkout -b #BRANCHNAME# #TAG_NAME#
定義別名
- 例如給 commit 定義別名為 ci
$ git config --global alias.ci commit
$ git config --global alias.last 'log -1 HEAD'