美文网首页
Git - 版本庫一般操作(二)

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

作者: 鬼王丶 | 来源:发表于2017-09-01 17:28 被阅读0次

本篇主要記錄了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輸出信息說明

  • --- 標記原始文件;
  • +++ 標記新文件
  • @@之間表示兩個不同文件版本的上下文行號。以-開始的行表示從源文件刪除該行以得到新文件。以+開始的行表示在原文件中添加該行以產生新文件。

相关文章

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

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

  • git基本操作 梳理

    git操作梳理一、git基本操作1.创建版本仓库 git init(.git目录)2.版本创建 git add ...

  • Git常用命令

    版本回退git reset 回退add 操作Git 版本恢复还原命令 reset git reset –mixed...

  • Git版本控制和连接GitHub及相关问题

    Git版本控制和连接GitHub一、Git简介1. Git概述二、本地库基本操作1. 创建本地仓库reposito...

  • git

    git命令 git介绍 分布式版本控制系统。 git版本库操作 创建git仓库在C:\github\创建目录hel...

  • 收藏链接

    Git版本控制相关 Git版本恢复命令reset(转载) 如何在 Git 里撤销(几乎)任何操作 Git命令集 W...

  • Git命令详解(转)

    Git命令详解 添加操作 提交操作 删除操作 撤销操作 在Git中,用HEAD表示当前版本。 撤销add 撤销co...

  • 关于git reset命令

    git reset可以操作单个文件,也可以操作版本。先说版本:git reset有三种选项: 第一种是默认选项,不...

  • Git汇总

    绑定账户 常用操作指令: .gitignore文件: ##注意:git 一般只能对纯文本文件进行版本控制,但是如果...

  • 2018-09-30 Day31 - 学习Git

    Git是一个版本控制工具 -- 分布式的版本控制系统Mercury - python开发的版本控制软件 Git操作...

网友评论

      本文标题:Git - 版本庫一般操作(二)

      本文链接:https://www.haomeiwen.com/subject/oyzhjxtx.html