zoukankan      html  css  js  c++  java
  • GIT用法总结

    1 git中的几种文件状态

    a 未被git跟踪的文件,即是没有使用git add添加到git索引的的文件:untracked;

    b 没有修改但是已经被git跟踪的文件,即是使用git add添加到git索引的的文件:unmodified;

    c 已经修改但是没有提交到暂存区的文件,这个文件也有两个去处,通过”git add”可进入暂存(staged)状态,

    使用”git checkout”则丢弃修改,返因到unmodify状态:modified;

    d 已经通过git commit提交到暂存区的状态,这时库中的文件与本地文件又一致了,于是文件是unmodify状态。

    执行”git reset HEAD filenam”取消暂存,文件状态变为modified:staged;

    图形展示如下:

     

    2 git中的四种对象

    a blob:用来存储文件数据,就是一个通常的文件。
    b tree:看起来象一个目录结构,它引用了一串其他的tree或者blob(就像文件和子目录一样)。
    c commit:指向一个单独的tree,标志着一个项目在一个特定的时间点看起来是什么样子。它包含了那一时间点的元信息,比如时间戳、作者、自从上次提交以来所做的改变、指向前一次提交的引用,等等。
    d tag:是用特定的方法标识特定的提交。它通常用来标记特定的commit作为特定的release,或者这条主线上的其他的什么东西。 

    如果我们一个小项目, 有如下的目录结构:

    $>tree
    .
    |-- README
    `-- lib
        |-- inc
        |   `-- tricks.rb
        `-- mylib.rb
    
    2 directories, 3 files

    如果我们把它提交(commit)到一个Git仓库中, 在Git中它们也许看起来就如下图


    当输入git reflog命令可以看到历史commit的记录

    前面的一段19433b5是每次commit产生的sha码的前8位长度的字符串,然后输入git ls-tree 19433b5 就可以看到这个tree的详细信息

    上图列出了tree 19433b5的一些情况 或者可以输入git ls-tree -r 19433b5 则会递归显示根目录下面所有的文件的信息
    每一次的commit都会从根tree开始记录目录中的文件的变化情况
    可以参考 http://gitbook.liuhui998.com/1_2.html

    3 git常用命令

    a 获得远程服务器中的某个git仓库使用git clone命令
    $ git clone git://git.kernel.org/pub/scm/git/git.git 如果在命令后面添加 my-git则会用my-git目录替换git的目录

    b 初始化一个本地仓库
    $ git init name
    初始化一个名字为name的本地裸仓库 进入name文件夹会看到有一个.git的隐藏目录,存放当前仓库的所有数据文件

    c 让git开始跟踪文件,添加到git的索引中:git add
    这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等
    $ git add . # 將資料先暫存到 staging area, add 之後再新增的資料, 於此次 commit 不會含在裡面.
    $ git add filename #将filename文件添加到git index中
    $ git add modify-file # 修改過的檔案, 也要 add. (不然 commit 要加上 -a 的參數)
    $ git add -u # 只加修改過的檔案, 新增的檔案不加入.
    $ git add -i # 進入互動模式

    d 将处于staging area的文件提交到本地:git commit
    $ git commit -m 'commit message'
    $ git commit -a -m 'commit -message' # 將所有修改過得檔案都 commit, 但是 新增的檔案 還是得要先 add.
    $ git commit -a -v # -v 可以看到檔案哪些內容有被更改, -a 把所有修改的檔案都 commit

    e 删除文件
    $ git rm filename #从工作目录删除某个文件并解除git对该文件的跟踪
    $ git rm --cached filename  #解除git对该文件的跟踪但是不删除该文件

    f 修改档案名
    $ git mv filename new-filename

    g 查看目前分支状态
    $ git status

    h 撤销某个文件的修改
    $ git checkout filename #将filename的内容还原为暂存区中对应文件的内容 注意这里还原的不是某个commit版本中的内容
    $ git reset --hard commited_id



     

     

     

     

     

     

  • 相关阅读:
    燕园笔记之一——穿梭
    openvc学习笔记(1)——简单应用
    匆匆过客
    opencv学习(3)——高斯平滑图像
    为什么(win10系统)电脑上面的鼠标(触摸板)突然用不了?怎么开启和关闭、
    SqlServer自动备份数据库
    CodeSmith批量生成实体类
    XML文件的序列化和反序列化
    AjaxPro的使用
    设计模式之——策略模式
  • 原文地址:https://www.cnblogs.com/springdong/p/3560960.html
Copyright © 2011-2022 走看看