Git常用命令使用介绍

Git 小智 914℃ 1评论

前言

Git作为一个版本控制工具,使用非常的广泛,虽然已经有不少优秀的客户端工具,但是有些时候学习一下其命令行的方式也是没有坏处的
测试环境: centos7.0 64位
登陆用户:root

常用命令使用介绍

git init

使用git init命令我们可以创建一个git的仓库,当然仅仅是本地化的仓库,体现为新增了一个 .git 目录

[root@VM_112_250_centos src]# mkdir GitTest
[root@VM_112_250_centos src]# cd GitTest/
[root@VM_112_250_centos GitTest]# git init
Initialized empty Git repository in /usr/local/src/GitTest/.git/
[root@VM_112_250_centos GitTest]# ls -a
.  ..  .git

git clone

使用git clone克隆一个已经在github.com上创建的项目

[root@VM_112_250_centos src]# git clone https://github.com/WisdomLu/QRCode.git

GIT的使用需要配置用户名和邮箱地址

在这个项目下建立一个HelloWorld.java文件

[root@VM_112_250_centos src]# cd QRCode/
[root@VM_112_250_centos QRCode]# touch HelloWorld.java

git commit就是向本地版本库提交, -m代表为本次提交添加注释

[root@VM_112_250_centos QRCode]# git commit -m 'add HelloWorld'
*** Please tell me who you are.
Run
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@VM_112_250_centos.(none)')

上面的提示就是告诉我们要使用GIT首先是需要配置用户名和邮箱地址的,配置如下

[root@VM_112_250_centos QRCode]# git config --global user.email '649543518@qq.com'
[root@VM_112_250_centos QRCode]# git config --global user.name 'WisdomLu'  

git status

上面我们已经新增了一个HelloWorld.java的文件,并且也对git进行了配置,然后我们再次进行提交测试

[root@VM_112_250_centos QRCode]# git commit -m 'HelloWorld.java'
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
        HelloWorld.java
nothing added to commit but untracked files present

大致意思就是没有向本地版本库加入任何东西,但是有Untracked files类型的文件
一般在commit之前,我们应使用git status查看在上次提交之后是否有修改过的或新增的文件

[root@VM_112_250_centos QRCode]# git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        HelloWorld.java
nothing added to commit but untracked files present (use "git add" to track)
// git status -s 简短输出,-s表示short
[root@VM_112_250_centos QRCode]# git status -s
?? HelloWorld.java

上面显示该项目下(工作区)有Untracked files类型的文件,并告诉我们使用git add file进行操作

git add

执行 git add 命令,我们就可以将该文件添加到暂存区

[root@VM_112_250_centos QRCode]# git add HelloWorld.java 

当然如果有多个文件需要进行这样的操作,都用 git add file 的形式会特别的麻烦,这个时候我们可以使用git add . 命令来添加当前项目的所有文件

[root@VM_112_250_centos QRCode]# git add .
[root@VM_112_250_centos QRCode]# git status -s
A  HelloWorld.java

之后更改HelloWorld.java文件,再次查看

[root@VM_112_250_centos QRCode]# git status -s
AM HelloWorld.java

在这里 A 表示已经添加到暂存区,AM 表示添加到暂存区之后又发生了更改

git diff

使用git diff命令,可以用来比较文件的差异

尚未暂存的改动:git diff
已暂存的改动: git diff --cached
已暂存的与未暂存的所有改动:git diff HEAD
显示摘要而非整个diff:git diff --stat

现在我们创建两个文件,并提交到暂存区

[root@VM_112_250_centos QRCode]# touch Apple.java
[root@VM_112_250_centos QRCode]# touch Banana.java
[root@VM_112_250_centos QRCode]# git add .

比较当前文件和暂存区文件差异(还未暂存的改动,上面对HelloWorld.java进行了更改)

[root@VM_112_250_centos QRCode]# git diff
diff --git a/HelloWorld.java b/HelloWorld.java
index e69de29..1cc314b 100644
--- a/HelloWorld.java
+++ b/HelloWorld.java
@@ -0,0 +1,2 @@
+class HelloWorld{
+}

查看已暂存的改动(就是比较暂存区和本地资源库的差异)

[root@VM_112_250_centos QRCode]# git diff --cached
diff --git a/Apple.java b/Apple.java
new file mode 100644
index 0000000..e69de29
diff --git a/Banana.java b/Banana.java
new file mode 100644
index 0000000..e69de29
diff --git a/HelloWorld.java b/HelloWorld.java
new file mode 100644
index 0000000..e69de29

查看已暂存的与未暂存的所有改动

[root@VM_112_250_centos QRCode]# git diff HEAD
diff --git a/Apple.java b/Apple.java
new file mode 100644
index 0000000..e69de29
diff --git a/Banana.java b/Banana.java
new file mode 100644
index 0000000..e69de29
diff --git a/HelloWorld.java b/HelloWorld.java
new file mode 100644
index 0000000..1cc314b
--- /dev/null
+++ b/HelloWorld.java
@@ -0,0 +1,2 @@
+class HelloWorld{
+}

查看摘要信息

[root@VM_112_250_centos QRCode]# git diff --stat
 HelloWorld.java | 2 ++
 1 file changed, 2 insertions(+)

git commit

这个命令就是用来将暂存区的内容添加到本地资源库
首先把所有内容添加到暂存区,然后进行commit

[root@VM_112_250_centos QRCode]# git add .
[root@VM_112_250_centos QRCode]# git status -s
A  Apple.java
A  Banana.java
A  HelloWorld.java
[root@VM_112_250_centos QRCode]# git commit
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i or -o; assuming --only paths...
# On branch master
# Your branch is up-to-date with 'origin/master'.
#
# Changes to be committed:
#       new file:   Apple.java
#       new file:   Banana.java
#       new file:   HelloWorld.java
~~~
"/usr/local/src/QRCode/.git/COMMIT_EDITMSG" 12L, 387C

直接使用 git commit的方式提交, git会采用vim的方式打开了一个文件。
所以我们需要添加 -m 选项 用以提交过程中添加注释

[root@VM_112_250_centos QRCode]# git commit -m 'add'
[master e8f95c4] add
 3 files changed, 2 insertions(+)
 create mode 100644 Apple.java
 create mode 100644 Banana.java
 create mode 100644 HelloWorld.java

现在我们已经把暂存中的所有文件添加到了本地版本库中了
再次查看

[root@VM_112_250_centos QRCode]# git status   
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean

以上是说master分支在原始分支的基础上提交了一次,现在没有任何内容需要提交,是一个干净的working tree
当然提交的时候我们也可以 git commit -a 来直接提交(跳过git add),当然还是需要添加注释的

[root@VM_112_250_centos QRCode]# git commit -a -m 'modify README'

git reset HEAD

如果我们修改文件并add之后,想把已经暂存的内容恢复到未add状态,我们可以使用 git reset HEAD命令来进行操作
我们先打开Apple.java类,并添加内容,之后再添加到暂存区

[root@VM_112_250_centos QRCode]# vim Apple.java 
package com.lxz.test;
class Apple{
        //测试
}
[root@VM_112_250_centos QRCode]# git add .
[root@VM_112_250_centos QRCode]# git status -s
M  Apple.java

现在我们想把刚刚提交到暂存区的文件恢复(变成未add状态,但还保留之前的更改)

[root@VM_112_250_centos QRCode]# git reset HEAD Apple.java
Unstaged changes after reset:
M       Apple.java

[root@VM_112_250_centos QRCode]# git status   
On branch master
Your branch is ahead of 'origin/master' by 4 commits.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
        modified:   Apple.java
no changes added to commit (use "git add" and/or "git commit -a")

看,又变成未add状态的了吧(之前添加的内容依然存在)

git rm

如果我们需要删除暂存区或分支上的文件, 但是当前项目(工作区)又需要使用,只是不希望这个文件被版本控制,这时可以使用 git rm --cached file命令

[root@VM_112_250_centos QRCode]# vim Banana.java    ==> 添加吃香蕉的方法
class Banana{
        //吃香蕉
        public void eat(){}
}
[root@VM_112_250_centos QRCode]# git status -s
M Banana.java
[root@VM_112_250_centos QRCode]# git add .
[root@VM_112_250_centos QRCode]# git rm --cached Banana.java 
[root@VM_112_250_centos QRCode]# git status -s
M  Apple.java
D  Banana.java
?? Banana.java

如果我们需要删除暂存区或分支上的文件,同时工作区也不需要这个文件了, 可以使用 git rm file来进行删除

[root@VM_112_250_centos QRCode]# git rm Apple.java 
error: the following file has changes staged in the index:
    Apple.java
(use --cached to keep the file, or -f to force removal)

上面就是说在主线上的Apple.java文件已经发生了改变,可以添加参数 –cached 移除版本控制,但是仍保留在工作区,或者添加 -f 来强制删除
当然如果是未进行更改的文件就可以直接的使用 git rm file 来删除了

[root@VM_112_250_centos QRCode]# git rm HelloWorld.java 
rm 'HelloWorld.java'
[root@VM_112_250_centos QRCode]# git status -s
M  Apple.java
D  Banana.java
D  HelloWorld.java
?? Banana.java

本文固定链接:心知博客 » Git常用命令使用介绍
本站内容除特别标注外均为原创,欢迎转载,但请保留出处!

喜欢 (2)
发表我的评论
取消评论
表情

请填写您的昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. :mrgreen:
    choco2017-12-17 20:48回复