1. 程式人生 > >Git 的命令操作

Git 的命令操作

1. 配置

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

git config --global user.email  [email protected]

git config --global color.ui true

git config --global core.editor vi

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

2.基本使用

1.顯示當前的配置資訊

git config --list

2. 建立repo

從別的地方獲取

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

自己建立

mkdir test

cd test

git init

3. 顯示狀態

git status

4. commit

git add file.1 file.2 先增加檔案,增加到index中。這樣commit的時候才知道要commit哪些檔案。

或者

git add -p   用來interactively選擇哪些改變需要被commit

git commit -m "log message"

或者

git commit -a  自動檢查應該commit什麼檔案。如果是新增的檔案,仍然要使用git add來新增。

5. 顯示以前的工作

git log 輸出格式

git log

git log -p       顯示patch

git log --stat   顯示改動的一個總結

git log --graph  只顯示當前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"   按照指定的格式輸出。

關於--pretty的其他選項和具體的format格式,參考 git log --help中PRETTY FORMAT這部分。

git log --follow file.c

這個功能很有意思,尤其是當file.c被移動後。

通常我們會移動某個檔案到某個目錄下。如果這麼做,git log是不能顯示目錄移動前的記錄的。

那就加上 --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" 篩選時間段

git log --grep="key word" 在commit 的message中查詢關鍵字

git log branch --not master 檢視在branch上的,但不在master上的記錄。 

git log -S"func_name"  查詢某個字元出現,或者移出的commit。 比如可以查詢一個函式是什麼時候新增,或者刪除的。

git show sha1   這個sha1是每個commit的sha1,這樣顯示某個commit的完全資訊,包括diff

6. 撤銷改動

git checkout -- file.1

撤銷了file.1的這次改動。只是撤銷了沒有staged的改動.

中間的 -- 表明了這是一個檔案 而不是一個branch的名字

git reset --hard HEAD

撤銷了所有沒有commit的改動,包括了stage的和沒有stage的。

這條命令的結果一樣

git checkout HEAD file.1

包括了staged 和沒有staged的都會清除。

有時候我們發現,之前做個一個commit有問題,不想要,想要去掉。

git revert HEAD      自動得重新做一個commit,將最後一次的commit返回回來。

git revert HEAD^     自動得重新做一個commit,將最後第二次的commit 返回回來。

7. 刪除一個commit

git reset --hard HEAD~1

刪除了最近的commit

8. 修改最近的一個commit

git commit --amend

7.顯示所做的改動

git diff

顯示所有的改動。 沒有add到index中的。

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

顯示staged改動,也就是add的東東,也就是將要commit的東東。

git diff commit1 commit2

顯示這兩個commit之間的變動, 從commit1到commit2的變動。

git diff commit1..commit2

兩個點,效果跟上面的一樣

git diff commit1...commit2

三個點,表示的是發生在commit2分支,一直到commit1和commit2共同父親的變化。

git blame -C file1.c

顯示檔案具體的改動。。。。恩,好像是用來找是誰的錯?

git blame -Ln,m file1.c 

檢視n,m兩行間的改動。

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

檢視commit1版本前的改動. 追查之前的log。

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

如果這個檔案被重新命名過,或者移動過位置,就要輸入舊的檔案的名字。

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

8. 刪除某個檔案

git rm file-name

從庫和當前的working directory中刪掉這個檔案

git rm --cached file-name

只從庫中刪除,保留當前的本地檔案。

9. 重新命名一個檔案

git mv file file-new

10. 應用patch

git apply patch-file

這樣做從patch-file中應用這個patch。 效果和patch命令類似。 

但是好處是,git apply要麼成功,要麼不成功。不想patch,有可能有部分的patch打上了,但是有的沒有打上。

git apply後,並沒有自動生成一個commit. 

git apply --check  可以用來檢測這個patch 是不是會產生衝突或者失敗。

git am patch-file

這是專門為git 設計的命令。 patch-file是通過git format-patch 生成的。 

其中包含了作者資訊和簡單描述。

git am後,會自動的生成一個commit.

git am --resolved

git am 過程中可能會有conflict. 如過遇到conflict, 那就需要手動修改code, git add 後

用git am --resolved 

11. git 製作patch

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

3. commit range

在git中,我們經常需要制定一個commit的範圍,比如git log中,可以顯示某範圍內的改動。

除了man gitrevisions, 在這個網站上也有不過的描述,尤其是對 double dot 和 triple dot

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

在git log中, 

git log ^r1 r2 表示顯示從r2到root,但是去掉r1到root中和r2到root有重複的。

這個也可以表示為 git log r1..r2. 

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

我這樣理解, 前一種顯示的是樹上的一個分支。而後一種顯示了兩個分支。

在git diff中

git diff目的是比較兩個commit之間的區別。

git diff A B 和 git diff A..B 是一樣的,就是顯示這兩個之間的區別。

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

                      有時候這個命令是,git merge-base A B

在一個branch上,但不在另一個branch上

git log local_copy ^kernel 

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

這個命令用來看,在local_copy branch上,但是不在kernel branch上的。 

4. Branch

1. 顯示branch

git branch

git branch -v 顯示詳細點的資訊

git branch --merged

2. 建立branch

git branch testing

或者

git checkout -b new_brach

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

還有一種建立branch的辦法是

git branch branch_name  b42294309188d57bf3398ed35660170a237d8c0a

注意,這後面這一長串的就是每個commit的sha1碼。

3. 切換到某個branch

git checkout testing

4. 圖形化顯示branch資訊

gitk

gitk --all

5. merge

先轉到要merge到的branch,如

git checkout master

一般都會merge到master上。

然後呼叫

git merge testing

這樣就把testing branch上的改動merge過來了。

6. 刪除branch

好了,這個branch不用了,刪掉吧

git branch -d testing

7. 處理conflict

在merge的過程中一般會遇到conflict.

先用git status檢視哪些檔案產生的衝突。

可以逐一修改檔案,也可以用git mergetool 來進行修改。

當所有的都修改好, 使用git commit。

8。 檢視有哪些branch merge進來了,哪些沒有

git branch --merged

git branch --no-merged

比如說我們checkout 到 master,用--no-merged 可以看到還有哪個branch的改動沒有到master上。

5. Stash

git stash 用來備份當前工作區的內容。 從最近的一次提交中讀取相關內容,讓工作區保證和上次提交的內容一致。

可以多次使用git stash來儲存當前的修改。

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

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

git stash save "name"

git stash

這兩個都是儲存當前的改動, 如果有name則可以新增一個方便辨識的標籤。

git stash apply 用來恢復最近一次的修改。

git stash apply [email protected]{1}來恢復指定的修改。

git stash pop [email protected]{1} 的作用和git stash apply類似。 

git stash pop 會從stash棧中移除某個記錄,而git stash apply不會。

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. 顯示某個tag的詳細資訊

git show v3.0

3. 建立tag 

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

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

這個將會加上pgp的簽名

對於一個-s的tag, 你可以

git tag -v v1.5

來驗證這個tag, 當然你需要有對方的PGP公鑰。

git tag v1.4-lw

這個是輕量級的tag。

git tag -a v1.2 SHA

對某個指定的SHA打tag,預設是HEAD

git push origin v1.2

git push origin --tags

預設情況下是不會將tag的資訊送到遠端的。 

第一的命令將某個指定的tag送到遠端。

第二個命令將所有的tag送到遠端。

7. Remote Repository

https://github.com/ 這個網上可以提供建立一個免費的git的repo

remote repo是用來多個人合作的。恩。。。,比較高階。

顯示remote repo的資訊

git remote

git remote -v

git remote show origin 

新增別的remote 庫

git remote add localname URL

也就是用這個localname 來代表URL

然後就可以從remote中下載程式碼

git fetch localname

預設glone後local的HEAD是track在origin/master上的,

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

git branch --track feature origin/feature

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

檢視remote的情況

git remote show origin

上傳changes,如果你有許可權,你可以上傳自己的更新到remote

git push origin master

意思是push到 origin這個遠端樹的master 分支上

git push origin :master

是刪除remote的分支

下載別的更新?

git pull

下載了更新就直接merge了

當本地的git倉庫更新後,我們需要與遠端server上的倉庫同步。

一般這麼做

git fetch   將同步一下狀態

git fetch -p 可以清空遠端已經不用的分支

git branch -v 可以看到本地倉庫中分支的狀態。

git branch -av 可以看到遠端和本地分支的狀態

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

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

8. Some Tips

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

git bisect start

git bisect bad      現在這個版本是壞的

git bisect good good_commit   good_commit這個版本是好的

接下來編譯,測試。 如果是好的

git bisect good

如果還是不好

git bisect bad

這樣git都會給你輸出某個中間的版本讓你繼續測試。

找到了錯誤,用

git bisect reset 恢復到原先的版本。

2. git 命令在bash中自動補全

 http://progit.org/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這個branch打包了。 

5. cleanup

git用得時間多了,會變慢。 那麼可以用下面的命令優化一下。

git gc   - Cleanup unnecessary files and optimize the local repository

git-repack - Pack unpacked objects in a repository

相關推薦

使用git-命令操作

1、開啟git hash命令視窗; 2、使用git checkout 'branchName' 進入主分支下(xxx為分支名稱,如develop); 3、使用git pull命令從主分支拉最新的程式碼; 出現如下顯示,表示pull完成 4、pull完成

git命令操作

git status  查詢狀態git push  提交git clone  +地址開啟vue專案:npm install  安裝依賴包cnpm install  安裝依賴包進入專案根目錄 npm run dev(跑起來~)>Listening at http://lo

Git命令操作記錄

Git命令列使用中做個筆記,以免忘記。 Git從master拉取完整程式碼 git clone 專案地址 git從其他遠端分支拉取完整程式碼,以release為例 git clone -b release 專案地址 進入專案,檢視所有本地 / 遠端分支 cd 專案

Git命令操作(一)

1.建立內容 下面建立一些檔案,它們會被放到版本控制之中 #Switch to homecd ~/# Create a directorymkdir ~/repo01# Switch into itcd repo01# Create a new directorymkdir datafiles# Cre

git --git命令操作

使用git 命令列操作。這樣能更加深層的理解git的原理。 有關git的操作詳細命令可以使用git help 使用git管理專案,第一件事就是建立倉庫。 git命令是: git init開啟git命令列工具。cd 到你的專案根目錄下; 然後敲入git init這樣git會

隨筆 新手的git命令操作

Git常用操作命令: 1) 遠端倉庫相關命令 檢出倉庫:$ git clone git://github.com/jquery/jquery.git 檢視遠端倉庫:$ git remote -v 新增遠端倉庫:$ git remote add [name] [ur

Git&GitHub學習筆記之(二)Git命令操作

在上篇文章中,我們就說過Git與GitHub不是一回事。GitHub是基於Git的,Git是基礎。所以再學習更多的GitHub知識之前,就得先了解Git。 一、什麼是Git Git 是一款免費、開源的分散式版本控制系統,他是著名的 Linux 發明者 L

gitgit命令操作

常用命令:git status 檢視狀態,在哪個分支上,有什麼需要提交的git log 檢視日誌git checkout master/dev 切換分支git checkout dev 切換到自己的分支git add . 新增新修改的git commit 提交git chec

git命令行基本操作

撤銷 合並 冒號 文件的 初始化 徹底 message rdquo only --------------------------------------------------------------------------------------------------

git 常用操作命令

進行 歷史 指定 demo 新的 地址 克隆 保存 txt文件 記錄下工作中,常用的Git命令操作,一個項目經常是多人協作開發,使用好git是開發人員必備的技能,下面記錄下一些基本的git操作,後續會記錄git解決沖突,合並分支,回滾,tag操作等。 克隆項目 - git

git常用操作命令

-m div blog origin 沖突 命令 com clas clear 代碼提交: git status git add . //或 git add * git commit -m "<message>" git push origin <yo

git 常用命令操作

命令操作 用戶名 每次 github blog mail 客戶端 strong str 目錄 一、用戶和郵箱     用戶和郵箱的作用     查看用戶名和郵箱地址     修改用戶名和郵箱地址 用戶名和郵箱地址的作用 用戶名和郵箱地址是本地git客戶端的一個變

Git 三、Git 命令操作

mce IT image 本地庫 ima nts 系統用戶 賬號 name 1、本地庫初始化   在本地新建git倉庫D:\git\gitRep,右鍵——>git bush here   (1)命令:git init   (2)效果: (3)註意:.git 目錄中

2. github創建 git倉庫,克隆,拉取和推送操作(所有的git命令前提是一定在當前項目目錄下)

push mit 什麽 one alt class 所有 -m 註冊 步驟:   1.點擊小貓,回到初始頁面   2.點擊start a project,首先會出現一個驗證email地址(我們註冊的時候,有一個email輸入,進去郵箱驗證一下) 3.重新點擊sta

idea 通過命令操作git

mit 刪除 tails detail 項目 mod master 通過命令 article 關於如何把git(遠程)端項目拉取到idea端的操作可以觀看:https://blog.csdn.net/autfish/article/details/52513465 在本

git庫的基本命令操作

登入git  git config --global user.name 'userName' #設定git賬戶,userName為使用者的git賬號  git config --global user.email 'email' #設定使用者的郵箱 建立一個資料夾

git常用命令操作

目前市場主流的版本控制系統主要分為:集中式版本控制系統與分散式版本控制系統。集中式版本控制目前主流的:SVN分散式版本控制系統目前主流的:Git 兩者之間的區別: 集中式有中央伺服器,開發人員需要從中央伺服器獲得最新版本的專案然後在本地開發,開發完推送到中央伺服器中,因此無法脫離伺服器。 分散式沒有中央伺

新手之git常用命令操作

有不對的歡迎指出,交流   1.git賬號訊息設定: git config --global --replace-all user.email "輸入你的郵箱"  git config --global --replace-all user.name "輸入你的使

必須要會的Git基本使用及常用命令操作

之前一直用的svn,後來換了之後才發現git的強大功能,是svn不能比的。缺點就是可能上手比較難一點,剛開始自己研究了兩天才摸索出來一些基本使用方法。 最近做專案需要建庫等等,都用到了git,隨著越來越多的使用,也越來有越多的認識。 一開始都是別人建好遠端庫,克隆下來就行了。 下面

四、Git命令操作

                                     Git命令列操作 1、本地庫初始化 weChat目錄就是專案目錄。 注意:.git這個目錄存放的是本地庫相關的子目錄和檔案,不