Git使用中非常有用的10個(gè)高級(jí)命令

2013-08-26 07:50:40來(lái)源:Linux Today作者:

迄今,我已經(jīng)使用Git很長(zhǎng)一段時(shí)間了,考慮分享一些不管你是團(tuán)隊(duì)開(kāi)發(fā)還是個(gè)人項(xiàng)目,都受用的高級(jí)git命令。

迄今,我已經(jīng)使用Git很長(zhǎng)一段時(shí)間了,考慮分享一些不管你是團(tuán)隊(duì)開(kāi)發(fā)還是個(gè)人項(xiàng)目,都受用的高級(jí)git命令。

1. 輸出最后一次提交的改變

這個(gè)命令,我經(jīng)常使用它 來(lái)發(fā)送其他沒(méi)有使用git的人來(lái)檢查或者集成所修改的。它會(huì)輸出最近提交的修改類(lèi)容到一個(gè)zip文件中。

git archive -o ../updated.zip HEAD $(git diff --name-only HEAD^)

2. 輸出兩個(gè)提交間的改變

類(lèi)似的,如果你需要輸出某兩個(gè)提交間的改變時(shí),你可以使用這個(gè)。

git archive -o ../latest.zip NEW_COMMIT_ID_HERE $(git diff--name-only OLD_COMMIT_ID_HERE NEW_COMMIT_ID_HERE)

3. 克隆 指定的遠(yuǎn)程分支

如果你渴望只克隆遠(yuǎn)程倉(cāng)庫(kù)的一個(gè)指定分支,而不是整個(gè)倉(cāng)庫(kù)分支,這對(duì)你幫助很大。

git init
git remote add -t BRANCH_NAME_HERE -f origin REMOTE_REPO_URL_PATH_HERE
git checkout BRANCH_NAME_HERE

4. 應(yīng)用 從不相關(guān)的本地倉(cāng)庫(kù)來(lái)的補(bǔ)丁

如果你需要其它一些不相關(guān)的本地倉(cāng)庫(kù)作為你現(xiàn)在倉(cāng)庫(kù)的補(bǔ)丁,這里就是通往那里的捷徑。

git --git-dir=PATH_TO_OTHER_REPOSITORY_HERE/.git format-patch -k -1 --stdout COMMIT_HASH_ID_HERE| git am -3 -k

5. 檢測(cè) 你的分支的改變是否為其它分支的一部分

cherry命令讓我們檢測(cè)你的分支的改變是否出現(xiàn)在其它一些分支中。它通過(guò)+或者-符號(hào)來(lái)顯示從當(dāng)前分支與所給的分支之間的改變:是否合并了(merged)。.+ 指示沒(méi)有出現(xiàn)在所給分支中,反之,- 就表示出現(xiàn)在了所給的分支中了。這里就是如何去檢測(cè):

git cherry -v OTHER_BRANCH_NAME_HERE
#例如: 檢測(cè)master分支

3git cherry -v master

6.開(kāi)始一個(gè)無(wú)歷史的新分支

有時(shí),你需要開(kāi)始一個(gè)新分支,但是又不想把很長(zhǎng)很長(zhǎng)的歷史記錄帶進(jìn)來(lái),例如,你想在公眾區(qū)域(開(kāi)源)放置你的代碼,但是又不想別人知道它的歷史記錄。

git checkout --orphan NEW_BRANCH_NAME_HERE

7. 無(wú)切換分支的從其它分支Checkout文件

不想切換分支,但是又想從其它分支中獲得你需要的文件:

git checkout BRANCH_NAME_HERE -- PATH_TO_FILE_IN_BRANCH_HERE

8.忽略已追蹤文件的變動(dòng)

如果您正在一個(gè)團(tuán)隊(duì)中工作,而且大家都在同一條branch上面工作,那么您很有可能會(huì)經(jīng)常用到fetch和merge。但是有時(shí)候這樣會(huì)重置您的環(huán)境配置文件,如此的話(huà),您就得在每次merge后修改它。使用這一命令,您就能要求git忽視指定文件的變動(dòng)。這樣,下回你再merge的話(huà),這個(gè)文件就不會(huì)被修改了。

git update-index --assume-unchanged PATH_TO_FILE_HERE

9.檢查提交的變動(dòng)是否是release的一部分

name-rev命令能告訴您一個(gè)commit相對(duì)于最近一次release的位置。使用這條命令,您就可以檢查您所做出的改動(dòng)是否是release的一部分了。

git name-rev --name-only COMMIT_HASH_HERE

10.使用rebase推送而非merge

如果您正在團(tuán)隊(duì)中工作并且整個(gè)團(tuán)隊(duì)都在同一條branch上面工作,那么您就得經(jīng)常地進(jìn)行fetch/merge或者pull。Git中,分支的合并以所提交的merge來(lái)記錄,以此表明一條feature分支何時(shí)與主分支合并。但是在多團(tuán)隊(duì)成員共同工作于一條branch的情形中,常規(guī)的merge會(huì)導(dǎo)致log中出現(xiàn)多條消息,從而產(chǎn)生混淆。因此,您可以在pull的時(shí)候使用rebase,以此來(lái)減少無(wú)用的merge消息,從而保持歷史記錄的清晰。

git pull --rebase

您也可以將某條branch配置為總是使用rebase推送:

git config branch.BRANCH_NAME_HERE.rebase true

關(guān)鍵詞:Git

贊助商鏈接: