Git Notes

# Git 
## 基本概念

### 直接记录快照
+ 提交更新时,对当时全部文件制作一个快照并保存这个快照的索引。没有修改的文件仅保留一个链接指向之前存储的文件。
+ 分布式
    - 每一个本地仓库都可以进行离线操作
    - 完整性
    - 基于文件内容和目录结构使用SHA-1进行计算校验,Git数据库中保存的信息都是以文件内容的哈希值来索引。


### 三种状态:
+ Modified          已修改
+ Staged            已暂存
+ Committed         已提交
  
<img src=“https://git-scm.com/book/en/v2/images/areas.png” />


+ 基本Git工作流程:
    - 在工作目录中修改文件。
    - 暂存文件,将文件的快照放入暂存区域。
    - 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。


### Git 基本操作&配置
+ `git config`
    - –system 当前系统的配置
    - –global 当前用户的配置
    - Repo 目录中的 .git/config 当前repo的
    - Example 
    - 用户信息

            $ git config --global user.name "John Doe"
            $ git config --global user.email johndoe@example.com

+ 文本编辑器

        $ git config --global core.editor emacs

+ 检查某项配置:
  
- 通过输入 git config <key>:来检查 Git 的某一项配置
- 获取帮助
  
        $ git help <verb>
        $ git <verb> --help
        $ man git-<verb>


    例如,要想获得 config 命令的手册,执行

        $ git help config


+ 获取repo
  
  - 在现有目录中初始化仓库  
  如果你打算使用 Git 来对现有的项目进行管理,你只需要进入该项目目录并输入:

        `$ git init`

    该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。

    - 如果是在一个已经存在文件的文件夹(而不是空文件夹)中初始化 Git 仓库来进行版本控制的话,应该开始跟踪这些文件并提交。 通过 `git add` 命令来实现对指定文件的跟踪,然后执行 `git commit `提交:
  
            $ git add *.c
            $ git add LICENSE
            $ git commit -m 'initial project version'


+ 记录更新
    - 工作目录下文件的2中状态:
        - Tracked
        - Untracked
    - 基本命令
  
            $ git status / git status -s
            $ git add 
            $ cat .gitignore  创建一个名为 .gitignore 的文件,列出要忽略的文件模式

    - .gitignore 的格式规范如下:
        - 所有空行或者以 # 开头的行都会被 Git 忽略。
        - 可以使用标准的 glob 模式匹配。
        - 匹配模式可以以(/)开头防止递归。
        - 匹配模式可以以(/)结尾指定目录。
        - 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
        
        
        PS: 
        - 所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 
        - 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(*) 表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z , a/b/z 或 a/b/c/z 等


+ `git diff –cached & git diff –staged`   
查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。(Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的,但更好记些

+ `$git commit -a -m 'added new benchmarks'`  
跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤

+ `git rm PROJECTS.md`  
移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 –f

+ `$ git rm --cached README`  
把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。

+ `git mv file_from file_to`  
移动文件

+ `$ git log `  
查看提交历史, 个常用的选项是 -p,用来显示每次提交的内容差异。 可以加上 -2 来仅显示最近两次提交,想看到每次提交的简略的统计信息,可以使用 --stat 选项,另外一个常用的选项是 --pretty。 这个选项可以指定使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如用 oneline 将每个提交放在一行显示, git log –pretty=online, 


+ `$ git log --pretty=format`

            %H       提交对象(commit)的完整哈希字串

            %h      提交对象的简短哈希字串

            %T      树对象(tree)的完整哈希字串

            %t       树对象的简短哈希字串

            %P      父对象(parent)的完整哈希字串

            %p      父对象的简短哈希字串

            %an     作者(author)的名字

            %ae     作者的电子邮件地址

            %ad     作者修订日期(可以用 --date= 选项定制格式)

            %ar     作者修订日期,按多久以前的方式显示

            %cn     提交者(committer)的名字

            %ce     提交者的电子邮件地址

            %cd     提交日期

            %cr     提交日期,按多久以前的方式显示

            %s      提交说明
            
+ `$ git log --pretty=format:"%h %s" –graph  `  
这个选项添加了一些 ASCII 字符串来形象地展示你的分支、合并历史

+ 撤销操作  
`$ git commit –amend  `  
这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。
- `git reset HEAD <file> `   
取消暂存的某个文件

- `git remote add <shortname> <url> `   
添加一个新的远程 Git 仓库

- `git fetch remote-name `    
某种意义上, fetch = pull + merge, 如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。
- `git push origin master  `   
推送项目到远程


-`$ git remote show origin-name  `  
查看远程仓库
    
- `$ git remote rename pb paul `   
远程仓库的重命名


- `$ git remote rm paul`  
移除

- `$ git tag`  
列出标签

- `git tag -a v1.4 -m "my version 1.4" `  
创建一个附注标签













posted @ 2020-01-13 16:05  淡淡的蛋  阅读(145)  评论(0)    收藏  举报