Git學習筆記

一、建立目錄:/a/b/c
[root@centos demo]# mkdir -p a/b/cphp

二、顯示版本庫.git目錄所在的位置
[root@centos c]# git rev-parse --git-dir
/path/to/my/workspace/demo/.gitgit

三、顯示工做區根目錄:
[root@centos c]# git rev-parse --show-toplevel
/path/to/my/workspace/democentos

四、相對於工做區根目錄的相對目錄:
[root@centos c]# git rev-parse --show-prefix
a/b/c/服務器

五、顯示從當前目錄(cd)後退(up)到工做區的根的深度
[root@centos c]# git rev-parse --show-cdup
../../../app

六、
git config命令的各參數的區別:
執行下面的命令,將打開/path/to/my/workspace/demo/.git/config文件進行編輯。
[root@centos /]# cd /path/to/my/workspace/demo/
[root@centos demo]# git config -e
執行下面的命令,將打開/home/leedaning/.gitconfig(用戶主目錄下的.gitconfig文件)全局配置文件進行編輯less

[root@centos etc]# git config -e --global
[user]
email = leedaning@163.com
name = leedaning
emial = dolialove@qq.com
[i18n]
commitencoding = utf-8
[color]
diff = auto
status = auto
branch = auto
interactive = auto
ui = auto
[core]
autocrlf = false
~
執行下面的命令,將打開/etc/gitconfig系統級配置文件進行編輯。若是Git安裝在非標準位置,則這個系統級的配置文件也多是在另外的位置。
[root@centos ~]# git config -e --systemssh

Git的三個配置文件分別是版本庫級別的配置文件、全局配置文件(用戶主目錄下)和系統級配置文件(/etc目錄下)。其中版本庫級別的配置文件的優先級最高,全局配置文件次之,系統級配置文件優先級最低。這樣的優先級設置可讓版本庫.git目錄下的config文件中的配置覆蓋用戶主目錄下的Git環境配置,而用戶主目錄下的配置也能夠覆蓋系統的Git配置文件。ide

七、
設置Git全局配置文件中關於user.name和user.email的設置:
[root@centos ~]# git config --global user.name 'leedaning'
[root@centos ~]# git config --global user.email 'leedaning@163.com'測試

查看Git全局配置文件中的user.name和user.email:
[root@centos ~]# git config user.name
leedaning
[root@centos ~]# git config user.email
leedaning@163.comfetch

刪除Git全局配置文件中關於user.name和user.email的設置:
[root@centos ~]# git config --unset --global user.name
[root@centos ~]# git config --unset --global user.email

八、
別名設置命令:
[root@centos ~]# git config --global alias.ci "commit -s"

九、
備份:
[root@centos /]# cd path/to/my/workspace/
[root@centos workspace]# ls
demo
[root@centos workspace]# git clone demo demo-step-1 //備份demo爲demo-step-1
Initialized empty Git repository in /path/to/my/workspace/demo-step-1/.git/
warning: You appear to have cloned an empty repository.
[root@centos workspace]# ls
demo demo-step-1


十、
查看git提交日誌:
[root@centos workspace]# git log --stat
(--stat參數能夠看到每次提交的文件變動統計。)

(先執行這個:git add welcome.txt)
修改文件:[root@centos demo]# echo "Nice to meet you." >> welcome.txt
使用"git diff"查看修改後的文件與版本庫中的文件的差別:
[root@centos demo]# git diff
diff --git a/welcome.txt b/welcome.txt
index 18832d3..fd3c069 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,2 @@
Hello.
+Nice to meet you.

執行git status -s 查看文件狀態。
[root@centos demo]# git status -s
M welcome.txt

十一、
不帶任何選項和參數調用「git diff」顯示工做區的最新改動,即工做區與提交任務(提交暫存區,stage)中相比的差別:
[root@centos demo]# git diff
diff --git a/welcome.txt b/welcome.txt
index 51dbfd2..69a4c8e 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1,3 +1,4 @@
Hello.
Nice to meet you.
Bye-Bye.
+Ha ha ha.

將工做區和HEAD(當前工做分支)相比,會看到更多的差別:
[root@centos demo]# git diff HEAD
diff --git a/welcome.txt b/welcome.txt
index 18832d3..69a4c8e 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,4 @@
Hello.
+Nice to meet you.
+Bye-Bye.
+Ha ha ha.

經過參數--cached或--staged調用git diff 命令,看到的是提交暫存區(提交任務,stage)和版本庫中文件的差別:
[root@centos demo]# git diff --cached
diff --git a/welcome.txt b/welcome.txt
index 18832d3..51dbfd2 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,3 @@
Hello.
+Nice to meet you.
+Bye-Bye.

而後執行git commit命令提交:
[root@centos demo]# git log --pretty=oneline
c5ae545bd88531837d172cd5b470e91e659d85ab Append a nice line.
[root@centos demo]# git commit -m "which version checked in?" //提交
[master ded662f] which version checked in?
1 files changed, 2 insertions(+), 0 deletions(-)
[root@centos demo]# git log --pretty=oneline
ded662fad2a621d4d78200e81b429cafb8e513e5 which version checked in?
c5ae545bd88531837d172cd5b470e91e659d85ab Append a nice line.

十二、
git clean -fd
清除當前工做區中沒有加入版本庫的文件和目錄(非跟蹤文件和目錄)

git checkout .
用暫存區內容刷新工做區,重寫工做區

1三、
保存當前的工做進度:git stash
查看保存的進度列表命令:git stash list
從最近保存的進度進行恢復:git stash pop
刪除一個存儲的進度(默認刪除最新的進度):git stash drop
刪除全部存儲的進度:git stash clear


1四、
查看暫存區(版本庫)中的文件:git ls-files

1五、
刪除文件:git rm
如:git rm detached-commit.txt hack-1.txt welcome.txt

查看一下狀態:git status

刪除動做加入了暫存區,這時執行提交動做就真正意義上執行了文件的刪除:git commit -m "delete trash files. (using:git rm)"

1六、
快速標記刪除:git add -u

1七、
移動文件:git mv
[root@centos demo]# git mv welcome.txt README
[root@centos demo]# git commit -m "新的測試"
[master d196ac5] 新的測試
1 files changed, 0 insertions(+), 0 deletions(-)
rename welcome.txt => README (100%)

更名操做至關於對舊文件執行刪除,對新文件執行添加。實際上徹底能夠不使用git mv命令,而是以git rm和git add兩條命令取代

1八、
忽略文件:cat > .gitignore << EOF

git忽略語法:
忽略文件中的空行或以井號(#)開始的行會被忽略。
可使用通配符,參見Linux手冊:glob(7)。例如:星號(*)表明任意多字符,問好(?)表明一個字符,方括號(【abc】)表明可選字符範圍等。
若是名稱的最前面是一個路徑分隔符(/),代表要忽略的文件在此目錄下,而非子目錄的文件。
若是名稱的最後面是一個路徑分隔符(/),代表要忽略的是整個目錄,同名文件不忽略,不然同名的文件和目錄都忽略。
經過在名稱的最前面添加一個感嘆號(!)表明不忽略。

# 這是註釋行 -- 被忽略
*.a # 忽略全部以.a爲擴展名的文件。
!lib.a # 可是 lib.a 文件或目錄不要忽略,即便前面設置了對 *.a 的忽略。
/TODO # 只忽略此目錄下的TODO文件,子目錄的TODO文件不忽略。
build/ # 忽略全部 build/ 目錄下的文件。
doc/*.txt # 忽略文件如 doc/notes.txt,可是文件如 doc/server/arch.txt 不被忽略。

1九、
查看日誌:git log
顯示最近的幾條日誌:git log -3 --pretty=oneline

查看最近的六條提交:
git log --oneline -6

git log --stat --pretty=oneline -6


20、悔棋
查看當前版本庫最新的兩次提交:git log --stat -2
[root@centos demo]# git log --stat -2
commit 5de2d8d7540531dca40d69d92a09d498a5ce1edb
Author: leedaning <leedaning@163.com>
Date: Thu Jan 29 14:30:24 2015 +0800

Test commit src.php src/main.c file. author lee

README | 1 +
src.php | 4 ++++
src/main.c | 11 +++++++++++
3 files changed, 16 insertions(+), 0 deletions(-)

commit d196ac52dcad77f7e3139e5f133865a5b9bddc8d
Author: leedaning <leedaning@163.com>
Date: Thu Jan 29 11:46:53 2015 +0800

新的測試

README | 3 +++
welcome.txt | 3 ---
2 files changed, 3 insertions(+), 3 deletions(-)


更改提交的提交說明:git commit --amend -m "Remove hello.h, which is useless."
[root@centos demo]# git commit --amend -m "Remove hello.h, which is useless."
[master e90a31c] Remove hello.h, which is useless.
3 files changed, 16 insertions(+), 0 deletions(-)
create mode 100644 src.php
create mode 100644 src/main.c

2一、多步悔棋
以demo版本庫爲例,看看版本庫最近三次提交。
[root@centos demo]# git log --stat --pretty=oneline -3
5de2d8d7540531dca40d69d92a09d498a5ce1edb Test commit src.php src/main.c file. a
README | 1 +
src.php | 4 ++++
src/main.c | 11 +++++++++++
3 files changed, 16 insertions(+), 0 deletions(-)
d196ac52dcad77f7e3139e5f133865a5b9bddc8d 新的測試
README | 3 +++
welcome.txt | 3 ---
2 files changed, 3 insertions(+), 3 deletions(-)
7de05439c5a3590eac746dd71b0a4aa47be0bab7 測試2
README | 3
welcome.txt | 3 +++
2 files changed, 3 insertions(+), 3 deletions(-)
(END)

把最近的兩個提交壓縮爲一個,並把提交說明改成「modify hello.h」,可使用以下方法進行操做:
(1)使用--soft參數調用重置命令,回到最近兩次提交以前(也就是倒數第三次的時候)
命令:git reset --soft HEAD^^

(2)查看版本狀態和最新日誌:git status
[root@centos demo]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: welcome.txt -> README
# new file: src.php
# new file: src/main.c
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# src/Makefile
# src/version.h.in
[root@centos demo]# git log -1
commit 7de05439c5a3590eac746dd71b0a4aa47be0bab7
Author: leedaning <leedaning@163.com>
Date: Thu Jan 29 11:45:59 2015 +0800

測試2

(3)執行提交操做,即完成最新兩個提交壓縮爲一個提交的操做:git commit -m "modify hello.h"
[root@centos demo]# git commit -m "modify hello.h"
[master 960e11b] modify hello.h
3 files changed, 16 insertions(+), 0 deletions(-)
rename welcome.txt => README (77%)
create mode 100644 src.php
create mode 100644 src/main.c

(4)查看提交日誌,「多步悔棋」操做成功
[root@centos demo]# git log --stat --pretty=oneline -2
960e11b727672dfdb5aed64971098bcc0662e41c modify hello.h
README | 4 ++++
src.php | 4 ++++
src/main.c | 11 +++++++++++
welcome.txt | 3 ---
4 files changed, 19 insertions(+), 3 deletions(-)
7de05439c5a3590eac746dd71b0a4aa47be0bab7 測試2
README | 3 ---
welcome.txt | 3 +++
2 files changed, 3 insertions(+), 3 deletions(-)

 

2二、時間旅行一
(1)首先查看最新6條提交
[root@centos demo]# git log --oneline --decorate -6
6d2fd9c 提交文件06
ff67aac 提交文件05
022d64d 提交文件04
38f0dd5 一次提交文件0二、03
ade3bc1 提交文件01
ce72740 更名測試

(2)對版本庫要用到的提交記錄進行標記,使用命令git tag(無非就是在特定命名空間創建「固定」的引用,用於對提交進行標識):
[root@centos demo]# git tag F
[root@centos demo]# git tag E HEAD^
[root@centos demo]# git tag D HEAD^^
[root@centos demo]# git tag C HEAD^^^
[root@centos demo]# git tag B HEAD~4
[root@centos demo]# git tag A HEAD~5

 

經過日誌,查看被標記的5個提交:
[root@centos demo]# git log --oneline --decorate -6
6d2fd9c (HEAD, F) 提交文件06
ff67aac (E) 提交文件05
022d64d (D) 提交文件04
38f0dd5 (C) 一次提交文件0二、03
ade3bc1 (B) 提交文件01
ce72740 (A) 更名測試

好戲如今開始:
1、如今演出第一幕:幹掉壞蛋D
一、執行git checkout命令,暫時將HEAD頭指正切換到C,切換過程顯示處於非跟蹤狀態的警告,木有關係,劇情須要。
[root@centos demo]# git checkout C
Note: checking out 'C'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

HEAD is now at ce72740... 更名測試

無誤的結果爲:
[root@centos demo]# git checkout C
Previous HEAD position was 6d2fd9c... 提交文件06
HEAD is now at 38f0dd5... 一次提交文件0二、03


二、執行揀選操做將E提交放在當前HEAD上重放。
由於E和master^顯然指向同一個角色,所以能夠用下面的語法。
[root@centos demo]# git cherry-pick master
Finished one cherry-pick.
[detached HEAD f3b85ad] modify hello.h
3 files changed, 16 insertions(+), 0 deletions(-)
create mode 100644 src.php
create mode 100644 src/main.c
[root@centos demo]# git cherry-pick master^
Finished one cherry-pick.
[detached HEAD 5ac7400] 測試2
1 files changed, 0 insertions(+), 0 deletions(-)
rename README => welcome.txt (100%)


若是還有F則:
E:git cherry-pick master^
F:git cherry-pick master
三、經過日誌能夠看出壞蛋D已經不存在了:git log --oneline --decorate -6
[root@centos demo]# git log --oneline --decorate -6
5ac7400 (HEAD) 測試2
f3b85ad modify hello.h
38f0dd5 (C) 一次提交文件0二、03
ade3bc1 (B) 提交文件01
ce72740 (A) 更名測試
ded662f which version checked in?


四、經過日誌還能夠看出來,最新兩次提交的原始創做日期(AuthorDate)和提交日期(CommitDate)不一樣。AuthorDate是揀選提交的原始更改時間,而CommitDate是揀選操做時的時間,所以揀選後的新提交的SHA1哈希值也不一樣於所揀選的原提交的SHA1哈希值。第三次的原始創做日期(AuthorDate)和提交日期(CommitDate)是一致的。
[root@centos demo]# git log --pretty=fuller --decorate -3
commit 5ac74000d5f42f9a5c7e9897edd59c4271ba899c (HEAD)
Author: leedaning <leedaning@163.com>
AuthorDate: Thu Jan 29 11:45:59 2015 +0800
Commit: leedaning <leedaning@163.com>
CommitDate: Fri Jan 30 10:48:40 2015 +0800

測試2

commit f3b85adfde481174443740cbe81460417c2872ab
Author: leedaning <leedaning@163.com>
AuthorDate: Thu Jan 29 16:58:44 2015 +0800
Commit: leedaning <leedaning@163.com>
CommitDate: Fri Jan 30 10:47:57 2015 +0800

modify hello.h

commit 38f0dd50880a8c1f202edf0416f3331d2f77f293 (C)
Author: leedaning <leedaning@163.com>
AuthorDate: Fri Jan 30 10:24:39 2015 +0800
Commit: leedaning <leedaning@163.com>
CommitDate: Fri Jan 30 10:24:39 2015 +0800

一次提交文件0二、03

五、最重要的一步操做,就是要將master分支重置到新的提交ID(960e11b)上。
下面的切換操做使用了reflog的語法,即HEAD@{1}至關於切換回master分支前的HEAD指向,即960e11b。
[root@centos demo]# git checkout master
Previous HEAD position was 5ac7400... 測試2
Switched to branch 'master'
[root@centos demo]# git reset --hard HEAD@{1}
HEAD is now at 5ac7400 測試2


2、
(3)
(4)


2三、
反轉提交:git revert
查看反向提交以後的結果:git log --stat -2


2四、
git版本庫克隆:git clone
實現克隆之間的同步:git push和git pull


2五、分支
查看本地分支:git branch
查看本地版本庫中全部分支:git branch -al
查看遠程分支:git branch -a
建立分支develop:git branch develop
把分支develop推送到遠程分支:git push origin develop
切換到分支develop:git checkout develop
刪除本地分支develop:git branch -d develop


2六、修改好代碼以後提交到遠程版本庫步驟:
(1)從本地工做目錄提交到本地版本庫:git commit
(2)從本地版本庫推送到遠程版本庫:git push origin HEAD:refs/for/develop
獲取鉤子(每次git init以後都要一次): scp -p -P 8849 lining@114.215.120.180:hooks/commit-msg .git/hooks/

若是提交到本地版本庫以後發現還須要修改:

回退到上次提交:git reset --soft HEAD~1
查看當前須要提交的修改:git status
從本地工做目錄提交到本地版本庫:git commit
推送到遠程版本庫:git push origin HEAD:refs/for/develop


2七、建立新的SSH key

ssh-keygen -t rsa -C "your_email@youremail.com"
Creates a new ssh key using the provided email Generating public/private rsa key pair.
#此處輸入將要保存的路徑,默認爲當前路徑
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):<press enter>
輸入回車後提示輸入一個相似於密碼的自定義的通行證號,若是直接回車則爲空
Enter passphrase (empty for no passphrase):<enter a passphrase>
#提示從新輸入以便確認輸入是否正確
Enter same passphrase again:<enter passphrase again>


2八、獲取服務器上最新的內容:$git fetch


2九、提交本地開發的代碼:
$git status //查看當前工做目錄的狀況,git會列出三部份內容:1 已經放至暫存區的內
容;2 作了修改還未放至暫存區的內容; 3 未跟蹤的文件

$git add * //將全部本地修改放至暫存區

$git status //查看當前工做目錄的狀況以確認暫存區的內容

$git commit //運行這個命令以後,會提示輸入本次提交的說明,填寫後保存,git就
將暫存區中的內容提交至本地版本庫中了。此時運行命令:git log 就能夠看到本次的提
交了。

注:在commit以前,要確保版本庫中已經下載了commit-msg鉤子,這個鉤子會在每次提交 的時候自動爲提示說明中加一個Change-Id:xxxxxxxxxxxxxxxx,XX是生成的惟一字符串。提交說明的格式:第一行爲本次提交的概要說明,空一行,第三行開始寫本次提 交的詳細說明,若無詳細說明,在第三行標記一個「-」

相關文章
相關標籤/搜索