Git - 版本庫一般操作(二)

本篇主要記錄了Git基本的操作。初始版本庫,配置提交人,添加/刪除,提交,查看差異。摘錄於<<Git版本控制管理>>

1.創建初始版本庫

在項目目錄下執行
git init
或從GitHub或GitLab上克隆一個版本庫
git clone ADDRESS
在本例中是從本地GitLab上克隆的。

2.配置提交人

Git支持不同層次的配置文件。按照優先級遞減的順序,如下:

  • .git/config
    版本庫特定的配置文件,可用--file選項修改,爲默認選項。擁有最高優先級。
  • ~/.gitconfig
    用戶特定的配置文件,可用--global選項修改。
  • /etc/gitconfig
    系統範圍內的配置設置,想用--system選項修改,需要有文件寫權限。

配置一個用戶名和email地址,用於你對所有版本庫的所有提交:

git config --global user.name "HANZO"
git config --global user.email "guixiong97@sina.cn"

移除設置:
git config --unset --global user.email

查看配置信息:

[hanzo@hanzo test-git]$ cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@gitlab.hanzo.net:hanzo/test-git.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[hanzo@hanzo test-git]$ git config -l
user.name=HANZO
user.email=guixiong97@sina.cn
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=git@gitlab.hanzo.net:hanzo/test-git.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

3.將文件添加索引(index) -- git add

[hanzo@hanzo test-git]$ echo "<project></proect>" > pom.xml
[hanzo@hanzo test-git]$ git add pom.xml
[hanzo@hanzo test-git]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   pom.xml
  • git add pom.xml 將文件添加到索引中,用來暫存(stage)。
  • git status 顯示中間狀態的pom.xml。下一次提交的時候將pom.xml添加到版本庫中。

4.提交(commit) -- git commit

[hanzo@hanzo test-git]$ git commit -m "Add file pom.xml"
[master 28fe320] Add file pom.xml
 1 file changed, 1 insertion(+)
 create mode 100644 pom.xml
  • 一條完全限定的git commit命令必須提供日誌消息和提交人。如果沒有通過git config命令配置提交人,可以在之上命令追加--author="HANZO <guixiong97@sina.cn>"
    如果既沒有配置提交人,也沒有指定,那麼可能會遇到一些奇怪的警告。
    如果提交的時候沒有提供日誌消息,那麼將會在交互式編輯器會話期間創建消息,比如在vim中輸入日誌消息。編輯器可以通過設置GIT_EDITOR環境變量指定。
  • 一個乾淨(clean)的工作目錄,意味着工作目錄裏不包含任何於版本庫中不同的未知或這更改過的文件。

5.再次提交 -- git commit FILE

#修改pom.xml文件
[hanzo@hanzo test-git]$ git commit pom.xml
[master 8f60aeb] Update file pom.xml
 1 file changed, 7 insertions(+), 1 deletion(-)
  • 由於pom.xml文件已經添加到版本庫中了,沒有必要再把這個文件告訴索引,即不需要在commit之前執行git add pom.xml。所以,新創建的不在索引中的文件必須先執行git add FILE
  • 當在命令行中提交一個指定名稱的文件時,文件的變更會自動捕捉。

6.查看提交 -- git log / git show / git show-branch

  • git log
[hanzo@hanzo test-git]$ git log
commit 8f60aebed6a0f960e774e8c428696372439410dd #提交的內部識別碼
Author: HANZO <guixiong97@sina.cn>
Date:   Fri Sep 1 15:23:32 2017 +0800

    Update file pom.xml

commit 28fe32043b5398701dfc5a40848b179522afcd44
Author: HANZO <guixiong97@sina.cn>
Date:   Fri Sep 1 15:10:51 2017 +0800

    Add file pom.xml
......

git log命令會產生版本庫裏一系列單獨提交的歷史。條目按照從最新的到最老的順序羅列出來。可在命令後追加git log --color,用以高亮顯示信息。

  • git show
[hanzo@hanzo test-git]$ git show 28fe32043b5398701dfc5a40848b179522afcd44
commit 28fe32043b5398701dfc5a40848b179522afcd44
Author: HANZO <guixiong97@sina.cn>
Date:   Fri Sep 1 15:10:51 2017 +0800

    Add file pom.xml

diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..aa33b42
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1 @@
+<project></proect>

產看特定提交的更加詳細信息。如果在執行git show命令沒有顯式指定提交碼,它將顯示最近的一次提交的詳細信息(在這裏爲8f60aebed6a0f960e774e8c428696372439410dd(Update file pom.xml))。

  • git show-branch
[hanzo@hanzo test-git]$ git show-branch --more=10
[master] Update file pom.xml
[master^] Add file pom.xml
[master~2] Add README

查看當前開發分支簡潔的但行摘要。參數“--more=10”表示額外10個版本,但是這裏僅有3個版本,所以只顯示了3行(默認只顯示最新的提交)。master爲默認分支名。

7.刪除和重命名 -- git rm / git mv

  • git rm
    從版本庫中刪除一個文件於添加一個文件是類似的,除了使用的命令是git rm
    假設現在你要刪除一個已經提交到版本庫中的文件:intr.txt,可以如下操作。
[hanzo@hanzo test-git]$ ls
intr.txt  pom.xml  README.md
[hanzo@hanzo test-git]$ git rm intr.txt
rm 'intr.txt'
[hanzo@hanzo test-git]$ git commit -m "Remove a intr.txt"
[master 4895651] Remove a intr.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 intr.txt

git rm表示你想要刪除這個文件的意圖並暫存這個變更,接着git commit在版本庫裏實現這個變更。它會把文件從系統中永久刪除。

  • git mv
    通過git rm和git add組合命令來間接爲一個文件衝命名。
[hanzo@hanzo test-git]$ ls
foo.html  pom.xml  README.md
[hanzo@hanzo test-git]$ mv foo.html bar.html
[hanzo@hanzo test-git]$ git rm foo.html
rm 'foo.html'
[hanzo@hanzo test-git]$ git add bar.html
[hanzo@hanzo test-git]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    foo.html -> bar.html

之上是使用git mv的相同操作:
$ git mv foo.html bar.html
在任一情況下,暫存的變更必須隨後進行提交。
$ git commit -m "Moved foo to bar"

8.查看提交差異 -- git diff

以下是三個可供樹或類樹對象使用git diff命令的基本來源:

  • 整個提交圖中的任意樹對象;
  • 工作目錄;
  • 索引
    通常,git diff命令進行樹比較時可以通過提交名,分支名或者標籤名。工作目錄的文件和目錄結構還有在索引中暫存文件的完整結構,都可以被看作樹。
    基於上述三種來源的組合,可以進行如下4種基本比較。
  • git diff
    命令後面沒有任何參數,它會顯示工作目錄和索引之間的差異。它不會顯示索引中的和永久版本庫中的文件的不同。
#修改pom.xml文件,增加了以行‘<name>TESTPROJECT</name>’
[hanzo@hanzo test-git]$ git diff
diff --git a/pom.xml b/pom.xml
index 7b3aa60..aaa1cae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,4 +4,5 @@
         <artifactId>AID</artifactId>
         <packaging>war</packaging>
         <version>1.0-SNAPSHOT</version>
+       <name>TESTPROJECT</name>
 </proect>
  • git diff COMMIT
    這個命令形式會顯示工作目錄和給定提交間的差異。常見的用法是用HEAD或者一個特定的分支名。HEAD始終指向當前分支的最近提交。
#當前工作目錄和第一個提交的比較
[hanzo@hanzo test-git]$ git diff 149feef576a8a9875cd13813048c686b525767ec
diff --git a/bar.html b/bar.html
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/bar.html
@@ -0,0 +1 @@
+foo
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..aaa1cae
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,8 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocat
+       <modelVersion>4.0.0</modelVersion>
+        <groupId>GIT</groupId>
+        <artifactId>AID</artifactId>
+        <packaging>war</packaging>
+        <version>1.0-SNAPSHOT</version>
+       <name>TESTPROJECT</name>
+</proect>
  • git diff --cached COMMIT
    這個命令形式會顯示索引中的變更和給定提交中的變更之間的差異。如果省略COMMIT,則默認爲HEAD。--cached可以用--staged代替。
#索引和版本庫提交對象的比較
[hanzo@hanzo test-git]$ git diff --cached #==>git diff --cached HEAD
[hanzo@hanzo test-git]$ git add pom.xml #將變更添加到緩存中
[hanzo@hanzo test-git]$ git diff --cached
diff --git a/pom.xml b/pom.xml
index 7b3aa60..aaa1cae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,4 +4,5 @@
         <artifactId>AID</artifactId>
         <packaging>war</packaging>
         <version>1.0-SNAPSHOT</version>
+       <name>TESTPROJECT</name>
 </proect>
  • git diff COMMIT1 COMMIT2
    這個命令顯示兩個提交之間的差異。它會忽略索引和工作目錄。
#第一個和第二個提交的比較
[hanzo@hanzo test-git]$ git diff 149feef576a8a9875cd13813048c686b525767ec 28fe32043b5398701dfc5a40848b179522afcd44
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..aa33b42
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1 @@
+<project></proect>

git diff輸出信息說明

  • --- 標記原始文件;
  • +++ 標記新文件
  • @@之間表示兩個不同文件版本的上下文行號。以-開始的行表示從源文件刪除該行以得到新文件。以+開始的行表示在原文件中添加該行以產生新文件。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容