zoukankan      html  css  js  c++  java
  • 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,跨平台测试:

      

      

      

      

      

       

       

     

    为什么要坚持,想一想当初!
  • 相关阅读:
    在Fedora 20下使用TexturePacker
    实战微信JS SDK开发:贺卡制作与播放(1)
    Fedora 20下安装Google PinYin输入法
    Netty5 时间服务器 有粘包问题
    Netty5入门学习笔记003-TCP粘包/拆包问题的解决之道(下)
    Netty5入门学习笔记002-TCP粘包/拆包问题的解决之道(上)
    11g Rac 添加日志组
    工作中的生长与完善——Leo鉴书86
    搜集直方图repeat和skewonly
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError Exception
  • 原文地址:https://www.cnblogs.com/JerryZao/p/9734883.html
Copyright © 2011-2022 走看看