日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Git 使用的簡(jiǎn)單匯總

 Tornador 2014-01-16

1. 配置

 

git config --global user.name "your name"

git config --global user.email  mail@box.com

git config --global color.ui true

git config --global core.editor vi

git config --global alias.lol "log --graph --all"    設(shè)置alias,這樣lol就是自己新的命令了。

 

2.基本使用

1.顯示當(dāng)前的配置信息

git config --list

 

2. 創(chuàng)建repo

從別的地方獲取

git clone git://git.kernel.org/pub/scm/git/git.git



自己建立

mkdir test

cd test

git init

 

3. 顯示狀態(tài)

git status

 

4. commit

git add file.1 file.2 先增加文件,增加到index中。這樣commit的時(shí)候才知道要commit哪些文件。

或者

git add -p   用來(lái)interactively選擇哪些改變需要被commit

git commit -m "log message"

 

或者

git commit -a  自動(dòng)檢查應(yīng)該commit什么文件。如果是新增的文件,仍然要使用git add來(lái)添加。

 

5. 顯示以前的工作

git log 輸出格式

git log

git log -p       顯示patch

git log --stat   顯示改動(dòng)的一個(gè)總結(jié)

git log --graph  只顯示當(dāng)前branch的

git log --graph --all    顯示所有branch的

git log --graph --all --decorate 顯示branch的名字


git log --pretty=oneline, short, full, fuller  輸出的log 形式不同

git log --pretty=format:"%h - %an, %ar : %s"   按照指定的格式輸出。

關(guān)于--pretty的其他選項(xiàng)和具體的format格式,參考 git log --help中PRETTY FORMAT這部分。


git log --follow file.c

這個(gè)功能很有意思,尤其是當(dāng)file.c被移動(dòng)后。

通常我們會(huì)移動(dòng)某個(gè)文件到某個(gè)目錄下。如果這么做,git log是不能顯示目錄移動(dòng)前的記錄的。

那就加上 --follow吧。


git log的篩選

git log -2 -p   顯示最近兩次commit的log 和 diff

git log --author="Author Name" 篩選特定作者的log

git log --since="2012-2-23" --before="2012-2-24" 篩選時(shí)間段

git log --grep="key word" 在commit 的message中查找關(guān)鍵字

git log branch --not master 查看在branch上的,但不在master上的記錄。


git log -S"func_name"  查找某個(gè)字符出現(xiàn),或者移出的commit。 比如可以查找一個(gè)函數(shù)是什么時(shí)候添加,或者刪除的。


git show sha1   這個(gè)sha1是每個(gè)commit的sha1,這樣顯示某個(gè)commit的完全信息,包括diff

 

6. 撤銷改動(dòng)

git checkout -- file.1

撤銷了file.1的這次改動(dòng)。只是撤銷了沒(méi)有staged的改動(dòng).

中間的 -- 表明了這是一個(gè)文件 而不是一個(gè)branch的名字


git reset --hard HEAD

撤銷了所有沒(méi)有commit的改動(dòng),包括了stage的和沒(méi)有stage的。

這條命令的結(jié)果一樣

git checkout HEAD file.1

包括了staged 和沒(méi)有staged的都會(huì)清除。


有時(shí)候我們發(fā)現(xiàn),之前做個(gè)一個(gè)commit有問(wèn)題,不想要,想要去掉。

git revert HEAD      自動(dòng)得重新做一個(gè)commit,將最后一次的commit返回回來(lái)。

git revert HEAD^     自動(dòng)得重新做一個(gè)commit,將最后第二次的commit 返回回來(lái)。

7. 刪除一個(gè)commit

git reset --hard HEAD~1

刪除了最近的commit


8. 修改最近的一個(gè)commit

git commit --amend

 

7.顯示所做的改動(dòng)

git diff

顯示所有的改動(dòng)。 沒(méi)有add到index中的。

 

git diff --staged或者 git diff --cached

顯示staged改動(dòng),也就是add的東東,也就是將要commit的東東。

 

git diff commit1 commit2

顯示這兩個(gè)commit之間的變動(dòng), 從commit1到commit2的變動(dòng)。


git diff commit1..commit2

兩個(gè)點(diǎn),效果跟上面的一樣


git diff commit1...commit2

三個(gè)點(diǎn),表示的是發(fā)生在commit2分支,一直到commit1和commit2共同父親的變化。


git blame -C file1.c

顯示文件具體的改動(dòng)。。。。恩,好像是用來(lái)找是誰(shuí)的錯(cuò)?


git blame -Ln,m file1.c

查看n,m兩行間的改動(dòng)。


git blame commit1~1 -Ln,m file1.c

查看commit1版本前的改動(dòng). 追查之前的log。


git blame commit1~1 -Ln,m -- old/file.c

如果這個(gè)文件被重命名過(guò),或者移動(dòng)過(guò)位置,就要輸入舊的文件的名字。

而且一定要加上 -- , 一定。

 

8. 刪除某個(gè)文件

git rm file-name

從庫(kù)和當(dāng)前的working directory中刪掉這個(gè)文件

git rm --cached file-name

只從庫(kù)中刪除,保留當(dāng)前的本地文件。


9. 重命名一個(gè)文件

git mv file file-new


10. 應(yīng)用patch

git apply patch-file

這樣做從patch-file中應(yīng)用這個(gè)patch。 效果和patch命令類似。

但是好處是,git apply要么成功,要么不成功。不想patch,有可能有部分的patch打上了,但是有的沒(méi)有打上。

git apply后,并沒(méi)有自動(dòng)生成一個(gè)commit.


git apply --check  可以用來(lái)檢測(cè)這個(gè)patch 是不是會(huì)產(chǎn)生沖突或者失敗。


git am patch-file

這是專門為git 設(shè)計(jì)的命令。 patch-file是通過(guò)git format-patch 生成的。

其中包含了作者信息和簡(jiǎn)單描述。

git am后,會(huì)自動(dòng)的生成一個(gè)commit.


git am --resolved

git am 過(guò)程中可能會(huì)有conflict. 如過(guò)遇到conflict, 那就需要手動(dòng)修改code, git add 后

用git am --resolved


11. git 制作patch

具體步驟寫在了 http://blog.csdn.net/richardysteven/article/details/6701156


3. commit range

在git中,我們經(jīng)常需要制定一個(gè)commit的范圍,比如git log中,可以顯示某范圍內(nèi)的改動(dòng)。

除了man gitrevisions, 在這個(gè)網(wǎng)站上也有不過(guò)的描述,尤其是對(duì) double dot 和 triple dot

http:///book/ch6-1.html

http:///questions/462974/whats-the-difference-between-and-in-git-commit-ranges

而且這種語(yǔ)法,在git log和git diff兩種情況下,有不同的意義.


在git log中,

git log ^r1 r2 表示顯示從r2到root,但是去掉r1到root中和r2到root有重復(fù)的。

這個(gè)也可以表示為 git log r1..r2.


git log r1...r2 表示 顯示從r1到root, r2到root,但是去掉他們共有的部分。


我這樣理解, 前一種顯示的是樹(shù)上的一個(gè)分支。而后一種顯示了兩個(gè)分支。


在git diff中

git diff目的是比較兩個(gè)commit之間的區(qū)別。


git diff A B 和 git diff A..B 是一樣的,就是顯示這兩個(gè)之間的區(qū)別。


git diff A...B 和 git diff $(git-merge-base A B) B一樣。 就是顯示 在B這個(gè)分支上,做了什么改動(dòng)。

                      有時(shí)候這個(gè)命令是,git merge-base A B


在一個(gè)branch上,但不在另一個(gè)branch上

git log local_copy ^kernel 

這樣可以再merge前,看看都有哪些東西要commit.

這個(gè)命令用來(lái)看,在local_copy branch上,但是不在kernel branch上的。





4. Branch

1. 顯示branch

git branch

git branch -v 顯示詳細(xì)點(diǎn)的信息

git branch --merged

 

2. 創(chuàng)建branch

git branch testing

或者

git checkout -b new_brach

這樣新建并且切換到了new_brach上

 

還有一種創(chuàng)建branch的辦法是

git branch branch_name  b42294309188d57bf3398ed35660170a237d8c0a

注意,這后面這一長(zhǎng)串的就是每個(gè)commit的sha1碼。

 

3. 切換到某個(gè)branch

git checkout testing

 

4. 圖形化顯示branch信息

gitk

gitk --all

 

5. merge

先轉(zhuǎn)到要merge到的branch,如

git checkout master

一般都會(huì)merge到master上。

 

然后調(diào)用

git merge testing

這樣就把testing branch上的改動(dòng)merge過(guò)來(lái)了。

 

6. 刪除branch

好了,這個(gè)branch不用了,刪掉吧

git branch -d testing


7. 處理conflict

在merge的過(guò)程中一般會(huì)遇到conflict.

先用git status查看哪些文件產(chǎn)生的沖突。

可以逐一修改文件,也可以用git mergetool 來(lái)進(jìn)行修改。

當(dāng)所有的都修改好, 使用git commit。


8。 查看有哪些branch merge進(jìn)來(lái)了,哪些沒(méi)有

git branch --merged

git branch --no-merged

比如說(shuō)我們checkout 到 master,用--no-merged 可以看到還有哪個(gè)branch的改動(dòng)沒(méi)有到master上。


5. Stash

git stash 用來(lái)備份當(dāng)前工作區(qū)的內(nèi)容。 從最近的一次提交中讀取相關(guān)內(nèi)容,讓工作區(qū)保證和上次提交的內(nèi)容一致。

可以多次使用git stash來(lái)保存當(dāng)前的修改。


git list可以看到一共保存了多少次。

linux-2.6$ git stash list
stash@{0}: WIP on 3.0: 02f8c6a Linux 3.0
stash@{1}: WIP on pci-fix: 79eefa4 Optimize the resource overlap check
stash@{2}: WIP on pci-fix: 02f8c6a Linux 3.0
stash@{3}: WIP on 3.0: 02f8c6a Linux 3.0

git stash save "name"

git stash

這兩個(gè)都是保存當(dāng)前的改動(dòng), 如果有name則可以添加一個(gè)方便辨識(shí)的標(biāo)簽。


git stash apply 用來(lái)恢復(fù)最近一次的修改。

git stash apply stash@{1}來(lái)恢復(fù)指定的修改。


git stash pop stash@{1} 的作用和git stash apply類似。

git stash pop 會(huì)從stash棧中移除某個(gè)記錄,而git stash apply不會(huì)。


git stash clear 清空棧。


6. Tag

1. 顯示tag

git tag    顯示所有的tag


匹配顯示

$ git tag -l v3.0*
v3.0
v3.0-rc1
v3.0-rc2
v3.0-rc3
v3.0-rc4
v3.0-rc5
v3.0-rc6
v3.0-rc7


2. 顯示某個(gè)tag的詳細(xì)信息

git show v3.0


3. 創(chuàng)建tag

git tag -a v1.4 -m "my version 1.4"


git tag -s v1.5 -m "my version 1.5"

這個(gè)將會(huì)加上pgp的簽名


對(duì)于一個(gè)-s的tag, 你可以

git tag -v v1.5

來(lái)驗(yàn)證這個(gè)tag, 當(dāng)然你需要有對(duì)方的PGP公鑰。


git tag v1.4-lw

這個(gè)是輕量級(jí)的tag。


git tag -a v1.2 SHA

對(duì)某個(gè)指定的SHA打tag,默認(rèn)是HEAD


git push origin v1.2

git push origin --tags

默認(rèn)情況下是不會(huì)將tag的信息送到遠(yuǎn)端的。

第一的命令將某個(gè)指定的tag送到遠(yuǎn)端。

第二個(gè)命令將所有的tag送到遠(yuǎn)端。


7. Remote Repository

https://github.com/ 這個(gè)網(wǎng)上可以提供建立一個(gè)免費(fèi)的git的repo

remote repo是用來(lái)多個(gè)人合作的。恩。。。,比較高級(jí)。

 

顯示remote repo的信息

git remote

git remote -v

git remote show origin


添加別的remote 庫(kù)

git remote add localname URL

也就是用這個(gè)localname 來(lái)代表URL


然后就可以從remote中下載代碼

git fetch localname


默認(rèn)glone后local的HEAD是track在origin/master上的,

所以如果你想要work on別的branch,需要先在本地建立一個(gè)branch

git branch --track feature origin/feature

這個(gè)意思是本地有個(gè)叫feature的branch,這個(gè)是track origin/feature的。


查看remote的情況

git remote show origin


上傳changes,如果你有權(quán)限,你可以上傳自己的更新到remote

git push origin master

意思是push到 origin這個(gè)遠(yuǎn)端樹(shù)的master 分支上

git push origin :master

是刪除remote的分支

 

下載別的更新?

git pull

下載了更新就直接merge了

 

當(dāng)本地的git倉(cāng)庫(kù)更新后,我們需要與遠(yuǎn)端server上的倉(cāng)庫(kù)同步。

一般這么做

git fetch   將同步一下?tīng)顟B(tài)

git fetch -p 可以清空遠(yuǎn)端已經(jīng)不用的分支

git branch -v 可以看到本地倉(cāng)庫(kù)中分支的狀態(tài)。

git branch -av 可以看到遠(yuǎn)端和本地分支的狀態(tài)

git checkout branchname 換到你想要更新的local branch上

git rebase origin/branchname 這樣可以將本地做的commit 取下,并重新apply到最新的地方。

 

8. Some Tips

1. 假如編輯到了某個(gè)版本,發(fā)現(xiàn)某個(gè)功能不起作用了,或者有bug了。但是自己知道之前的某個(gè)版本是好的。

git bisect start

git bisect bad      現(xiàn)在這個(gè)版本是壞的

git bisect good good_commit   good_commit這個(gè)版本是好的

 

接下來(lái)編譯,測(cè)試。 如果是好的

git bisect good

如果還是不好

git bisect bad

這樣git都會(huì)給你輸出某個(gè)中間的版本讓你繼續(xù)測(cè)試。

 

找到了錯(cuò)誤,用

git bisect reset 恢復(fù)到原先的版本。

 

2. git 命令在bash中自動(dòng)補(bǔ)全

 http:///book/ch2-7.html

將git-completion.bash 拷貝到 /etc/bash_completion.d/git

 

3. git alias

git config --global alias.co checkout

 

4. 用git 打包

git archive master | gzip  > master.tar.gz

把master這個(gè)branch打包了。 


5. cleanup

git用得時(shí)間多了,會(huì)變慢。 那么可以用下面的命令優(yōu)化一下。

git gc   - Cleanup unnecessary files and optimize the local repository

git-repack - Pack unpacked objects in a repository


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多