git命令的使用

1、git由来

  

2、安装:

  https://git-scm.com/downloads 下载对应操作系统的Git客户端

3、不同平台:

  Linux

  从RHEL上安装非常简单

  # yum install git

  windows

  下载对应版本,点击安装

  $ git --version 查看版本号

3、概念

    

    Repository仓库,版本库

    git初始化后,会在当前目录生成一个  .git 目录,这就是版本库

    Workspace工作空间,工作区

    .git 所在目录就是工作区, 一般是项目的根目录

    index索引

    介于工作区和版本库之间,暂存修改的

    remote 远程版本库

    网络上的另一个版本库,可以和本地库交互

4、使用

  初始化一个版本库

  $ git init  (如果在windows上,也是一样,先创建文件夹,在文件夹中执行)

  

  在当前目录中增加了一个 .git 目录, 不要自行修改这个目录里面的文件。

  当前目录一般是项目的根目录。 

  .git/  如下  

  

  添加文件

  $  echo '<html><title>test</title><body>My Web</body></html>' > index.html

  $ git add index.html

  单个文件添加

  这一步是把文件的当前变化添加到索引中,也就是有这个文件需要版本库来跟踪管理,注意这不是提交。

  此时,文件还可以继续修改,还可以添加新的被跟踪文件,一定要add才能把这些改变加入到索引中。

  批量添加:

  $ git add .

  . 号,代表当前目录,这条命令将递归添加当前目录及其子目录的所有文件,只要是目录,就会递归添加盖木璐下的文件和子目录。

  查看状态:  

  git status [ -s] 短格式 [ --short]  长格式

  测试:

 1 [git@node1 git_test]$ ls -a
 2 .  ..  .git  index.html
 3 [git@node1 git_test]$ cat index.html 
 4 <html><title>test</title><body>My Web</body></html>
 5 [git@node1 git_test]$ echo 'this is a test html' >> index.html 
 6 [git@node1 git_test]$ ls
 7 index.html
 8 [git@node1 git_test]$ cat index.html 
 9 <html><title>test</title><body>My Web</body></html>
10 this is a test html
11 [git@node1 git_test]$ git status
12 # On branch master
13 #
14 # Initial commit
15 #
16 # Changes to be committed:
17 #   (use "git rm --cached <file>..." to unstage)
18 #
19 #    new file:   index.html
20 #
21 # Changed but not updated:
22 #   (use "git add <file>..." to update what will be committed)
23 #   (use "git checkout -- <file>..." to discard changes in working directory)
24 #
25 #    modified:   index.html
26 #
27 [git@node1 git_test]$ git add index.html 
28 [git@node1 git_test]$ git status
29 # On branch master
30 #
31 # Initial commit
32 #
33 # Changes to be committed:
34 #   (use "git rm --cached <file>..." to unstage)
35 #
36 #    new file:   index.html
37 #
38 [git@node1 git_test]$ git status -s
39 A  index.html
40 [git@node1 git_test]$ git status --short
41 A  index.html
先addindex.html,再修改index.html,查看status,再add再看status

  

  Git的文件分类:

    • 追踪的Tracked , 已经加入版本库的文件
    • 未追踪的Untacked, 未加入到版本库的未被管理的文件。
    • 忽略的Ignored, git不再关注 的文件,例如一下临时文件
      • .gitignore 文件中,目录以 / 结尾,行起始的 !是取反
      • .gitignore内容如下:
        • 忽略文件不需要自己写,Python的已经有了https://github.com/github/gitignore/blob/master/Python.gitignore#L1
        • 其他语言的在这找https://github.com/github/gitignore

    测试:index.html add 到暂存区,index2.html 新文件,没有add ,此时查看 status   

 1 [git@node1 git_test]$ git status
 2 # On branch master
 3 #
 4 # Initial commit
 5 #
 6 # Changes to be committed:
 7 #   (use "git rm --cached <file>..." to unstage)
 8 #
 9 #    new file:   index.html
10 #
11 # Untracked files:
12 #   (use "git add <file>..." to include in what will be committed)
13 #
14 #    index2.html
View Code

  提交代码:

  $ git commit  --help

  $ git commit -m ' First-*-*-1-*-*-  commit

  

  再看状态:

  

  commit 提交更改到版本库

  -m 填写本次日志消息,必须写,工作中,程序员应该对每一次提交写明做了什么改动。

  测试:修改后,如果不add到暂存区,就无法commit到版本管理库

 1 [git@node1 git_test]$ echo 'welcome' > index.html 
 2 [git@node1 git_test]$ git status
 3 # On branch master
 4 # Changed but not updated:
 5 #   (use "git add <file>..." to update what will be committed)
 6 #   (use "git checkout -- <file>..." to discard changes in working directory)
 7 #
 8 #    modified:   index.html
 9 #
10 no changes added to commit (use "git add" and/or "git commit -a")
11 [git@node1 git_test]$ git commit -m 'Second_*_*_2_*_*_ commit'
12 # On branch master
13 # Changed but not updated:
14 #   (use "git add <file>..." to update what will be committed)
15 #   (use "git checkout -- <file>..." to discard changes in working directory)
16 #
17 #    modified:   index.html
18 #
19 no changes added to commit (use "git add" and/or "git commit -a")
20 [git@node1 git_test]$ 
View Code

  提交成功: 

   

  文件生命周期:

    

      文件add 后,就成为可追踪文件的 未修改状态unmodified,修改后,文件就变为modified状态,再次add偶,将变化提交到索引,状态变为staged,这才能提交。提交成功,文件状态从staged变回unmodified。

   git的提交:

   git的提交分为两个步骤:

    • 暂存变更:add作用是把新文件或者文件新的改动添加到一个暂存区stage,也就是加入到index
    • 提交变更:commit 提交的是暂存区中的改动,而不是物理文件目前的改动,提交到当前分支,默认是master分支。
    • 也可以使用下面的命令,将两步一起执行:
      • $ git commit index.html 

      如果改动了一批文件,一个个写名字很麻烦,使用下面的命令

        $ git commit  -a

        -a --all 会把所有跟踪的文件的改动自动暂存,然后commit,上面命令为提交message,会出现一个类似vi命令的操作界面,需要编写message后,才行。手动写,就可以。

  增补:  

    提交之后,忘记加入一个文件,about.html   (也可以使用 -m  省的进入vi 修改)

    

    git log 查看一下版本库里面提交的历史记录

  diff比较:

    查看各种差异:

      git diff 查看被跟踪文件为暂存的修改,比较暂存区和工作区

      git diff --cached 查看被跟踪文件暂存的修改,比较暂存区和上一次commit的差异

      git diff HEAD  查看被跟踪文件,比较工作区和上一次commit的差异,HEAD指代最后一次commit

    

    测试1:modified状态  

 1 [git@node1 git_test]$ clear
 2 [git@node1 git_test]$ ls
 3 about.html  index2.html  index.html
 4 [git@node1 git_test]$ echo 'welcom--' > about.html 
 5 [git@node1 git_test]$ git diff
 6 diff --git a/about.html b/about.html
 7 index e69de29..4be6f59 100644
 8 --- a/about.html
 9 +++ b/about.html
10 @@ -0,0 +1 @@
11 +welcom--

    测试2:staged状态

1 [git@node1 git_test]$ git add about.html 
2 [git@node1 git_test]$ git diff
3 [git@node1 git_test]$ git diff --cached
4 diff --git a/about.html b/about.html
5 index e69de29..4be6f59 100644
6 --- a/about.html
7 +++ b/about.html
8 @@ -0,0 +1 @@
9 +welcom--

    测试3:修改about.html 在diff HEAD

1 [git@node1 git_test]$ git diff HEAD
2 diff --git a/about.html b/about.html
3 index 4be6f59..5c379dd 100644
4 --- a/about.html
5 +++ b/about.html
6 @@ -1 +1 @@
7 -welcom--
8 +ewqweqweqwewqq

  HEAD

    1. HEAD 可以看做是一个游标,指定当前分支最后一次提交
    2. HEAD的值存储在 .git/HEAD中
    3. HEAD 指代最后一次提交
    4. HEAD^, 指代上一次提交
    5. HEAD^^ , 指代上上一次提交
    6. 上n次提交,表示HEAF~n

  检出和重置:

  checkout 用于切换分支,或恢复工作区文件。

  注意,checkout 会重写工作区,这个命令还是比较危险的

  

  测试:注意

  

  测试

  

  

  测试:

  

  

  测试

  

  删除和移动:

    git mv src dest  改名,直接把改名的改动放入暂存区

    git rm file  会同时在版本库 和 工作目录中删除文件,真删除

    git rm --cached file 将文件从暂存转成未暂存,从版本库中删除,但不删除工作目录的该文件,即文件恢复层不追踪的状态。

    以上都算是改动,必须commit才算真改动。

    测试:

    

    

    

    

  push到服务器

  本地搭建一个github私服模拟github

  配置本地用户名和邮箱。

  

  

  

  

  从远程库克隆  

  这一次使用git协议连接远程库。

  使用windows,跨平台测试:

  

  

  

  

  

   

   

 

为什么要坚持,想一想当初!
原文地址:https://www.cnblogs.com/JerryZao/p/9734883.html