zoukankan      html  css  js  c++  java
  • Git常用命令总结

    一、Git工作区域

    工作区(Working Directory)

    就是你平时存放项目代码的地方

    暂存区(Index / Stage)

    暂存区是工作区用来提交更改(commit)前可以暂存工作区的变化(用于临时存放你的改动),事实上它只是一个文件,保存即将提交到文件列表信息

    Git仓库(Repository)

    安全存放数据的位置,这里面有你提交到所有版本的数据,受版本控制

    三者也可以如下理解,

    • Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
    • WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
    • .git:存放Git管理信息的目录,初始化仓库的时候自动创建。
    • Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
    • Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
    • Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

    二、Git基本工作流程

    工作流程:

    (1)在工作目录中添加、修改文件;

    (2)将需要进行版本管理的文件放入暂存区域;(git add file)

    (3)将暂存区域的文件提交到git仓库。(git commit -m "描述信息")

              因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

     git reset --files 用来撤销最后一次git add files,你也可以用git reset撤销所有暂存区域文件。(操作对象是HEAD)

     git checkout --file 把文件从暂存区域复制到工作目录,用来丢弃本地修改。

    三、Git配置 

    1.git config -l 

     (也可以是git config --list,查看现在的git环境详细配置)

    查看不同级别的配置文件

    #查看系统config
    git config --system --list
      
    #查看当前用户(global)配置
    git config --global  --list

    #查看当前仓库配置信息 git config --local --list

    2.git config --global user.name "your name"
      git config --global user.email "your email"

     (设置你的用户名称和e-mail地址)

    注意:传递了--global 选项,就可以只做一次这个设置,处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。 总之--global为全局配置,不加为某个项目的特定配置。

    3.git config [--local|--global|--system] section.key value

      git config [--local|--global|--system] --unset section.key

     

    (添加、删除配置项 )

     四、Git操作

      4.1获得Git仓库:

     (a)创建全新仓库

    # 在当前目录新建一个Git代码库
    $ git init

     

    当然如果使用如下命令,可以把创建目录与仓库一起完成:


    # 新建一个目录,将其初始化为Git代码库
    $ git init [project-name]

        (b)克隆远程仓库

    # 克隆一个项目和它的整个代码历史(版本信息)
    $ git clone [url]

    比如我们要克隆的远程仓库托管在github上,地址为:https://github.com/liyifeng1994/ssm.git

      4.2、Git文件操作:

    版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态

    4.2.1文件的4种状态

    • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
    • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
    • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
    • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

    4.2.2

    4.2.2查看文件状态

    #查看指定文件状态
    git status [filename]
    
    #查看所有文件状态
    git status

    4.2.3添加文件与目录

    # 添加指定文件到暂存区
    $ git add [file1] [file2] ...
    
    # 添加指定目录到暂存区,包括子目录
    $ git add [dir]
    
    # 添加当前目录的所有文件到暂存区
    $ git add .

    4.2.4移除文件与目录(撤销add)

    当执行如下命令时,会直接从暂存区删除文件,工作区则不做出改变(停止跟踪文件但不删除)

    #直接从暂存区删除文件,工作区则不做出改变
    git rm --cached <file>

    移除所有未跟踪文件

    #移除所有未跟踪文件
    #一般会加上参数-df,-d表示包含目录,-f表示强制清除。
    git clean [options] 

    #只从stage中删除,保留物理文件
    git rm --cached readme.txt 
    
    #不但从stage中删除,同时删除物理文件
    git rm readme.txt 
    
    #把a.txt改名为b.txt
    git mv a.txt b.txt 

    4.2.5、查看文件修改后的差异

    #显示WorkSpace中的文件和暂存区文件的差异
    git diff [files]

     

    ---a表示修改之前的文件,+++b表示修改后的文件

    #比较暂存区的文件与之前已经提交过的文件
    git diff --cached
    #比较repo与工作空间中的文件差异
    git diff HEAD~n

    4.2.6签出

    如果仓库中已经存在文件f4.txt,在工作区中对f4修改了,如果想撤销可以使用checkout,签出覆盖

    检出命令git checkout是git最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区

    #用暂存区中filename文件来覆盖工作区中的filename文件。相当于取消自上次执行git add filename以来(如果执行过)的本地修改
    
    
    $ git checkout -- filename

    4.2.7提交文件

    通过add只是将文件或目录添加到了index暂存区,使用commit可以实现将暂存区的文件提交到本地仓库。

    # 提交暂存区到仓库区
    $ git commit -m [message]
    
    # 提交暂存区的指定文件到仓库区
    $ git commit [file1] [file2] ... -m [message]
    
    # 提交工作区自上次commit之后的变化,直接到仓库区,跳过了add,对新文件无效
    $ git commit -a
    
    # 提交时显示所有diff信息
    $ git commit -v
    # 修改最后一次提交 # 如果代码没有任何新变化,则用来改写上一次commit的提交信息 $ git commit --amend -m [message] # 修改上一次commit,并包括指定文件的新变化 $ git commit --amend [file1] [file2] ...

    #撤销上一次的提交
    
    git reset --hard HEAD~1

    4.2.8日志与历史

    #查看提交历史
    git log
    #查看指定文件的提交历史
    git log -p filename

    #记录这个仓库中所有的分支的所有更新记录,包括已经撤销的更新
    git reflog

    #以列表方式查看指定文件的提交历史

    git blame <file>

     

    4.2.9删除文件

    如果文件还是未跟踪状态,直接删除文件

    删除已提交文件,-f 强制删除,物理删除了,同时删除工作区和暂存区中的文件

    #撤销删除

    git checkout -- <file>...

    4.2.10文件操作总结

    五、Git分支

    5.1.1理解分支

    分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

    现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

    5.1.2分支命令

    # 列出所有本地分支
    $ git branch
    # 新建一个分支,但依然停留在当前分支
    $ git branch [branch-name]
    # 新建一个分支,并切换到该分支
    $ git checkout -b [branch]

    # 切换到指定分支,并更新工作区
    $ git checkout [branch-name]
    # 切换到上一个分支
    $ git checkout -
    # 合并指定分支到当前分支
    $ git merge [branch]
    # 删除分支
    $ git branch -d [branch-name]   
    #-D(大写)强制删除

     

    六、Git GUI 操作

    通过命令行可以深刻的理解Git,Git GUI或IDE插件却可以更加直观操作Git,常用的Git GUI有如下这些

    6.1.1GitHub for Desktop

    由全球开发人员交友俱乐部提供的强大工具

    6.1.2Source Tree

    老牌的Git GUI管理工具了,也号称是最好用的Git GUI工具。强大,功能丰富,基本操作和高级操作都设计得非常流畅,适合初学者上手,支持Git Flow。

    6.1.3TortoiseGit

    小乌龟,SVN的超广泛使用也使得这个超好用的Svn客户端成了几乎每个开发人员的桌面必备软件。小乌龟只提供Windows版本,提供中文版支持的。

     -------------此次博客就写完了,虽然总结的内容很多,写的也很累,但收获颇多,使自己又掌握新的一项技能,最后相信,一分耕耘一分收获。

  • 相关阅读:
    hihocoder_offer收割编程练习赛53_2hiho字符串3
    hihocoder_offer收割编程练习赛53_1继承顺位
    网易招聘笔试题--牛牛的背包问题
    EJB3.0快速入门
    MyEclipse的常用快捷操作----非常实用!!!
    Spring2.5零散笔记
    Hibernate零散笔记
    一个问题引发的OOA&OOD讨论.
    如何使用JUnit进行单元测试
    Log4j自学笔记
  • 原文地址:https://www.cnblogs.com/jyd0124/p/git1.html
Copyright © 2011-2022 走看看