git深度学习(上)

git深度学习(上)

本教程主要介绍git本地操作,假定你已经理解git 工作区、缓存区(索引区)、HEAD之间的关系。

本git系列计划 分上 中 下三部分,持续更新

git配置

git的配置文件:

可以通过config文件配置用户名,邮件,diff工具,写有排除列表的文件路径,merge工具等。

  • 电脑所有用户
    在配置git config时带上 --system 选项,配置文件存储在/etc/gitconfig,那么它就会读写该文件中的配置变量。
  • 当前用户
    如果只针对当前用户,配置文件存储在~/.gitconfig中(或者~/.config/git/config)可以使用--global 选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。
  • 针对当前仓库
    当前git目录下的.git/config。可以传递--local选项让 Git 强制读写此文件,(默认情况下用的就是它)

git会查找读取配置文件,首先在当前git目录下,然后在当前用户下,最后在系统用户下。覆盖级别依次递减。

我的~/.gitconfig内容

[filter "lfs"]
   clean = git-lfs clean -- %f
   smudge = git-lfs smudge -- %f
   process = git-lfs filter-process
   required = true
[user]
   name = superqun
   email = superqun@qq.com
[core]
   excludesfile = /Users/chenchaoqun/.gitignore_global
[difftool "sourcetree"]
   cmd = opendiff \"$LOCAL\" \"$REMOTE\"
   path = 
[mergetool "sourcetree"]
   cmd = /Applications/Sourcetree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
   trustExitCode = true
[commit]
   template = /Users/chenchaoqun/.stCommitMsg

获取帮助 @ help

三种方法,获取完整的本地帮助:

  • git help <verb>
  • git <verb> --help
  • man git-<verb>

简明的帮助:
git <verb> -h

获取git仓库

新建初始化仓库 @ init

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件。但是,在这个时候,我们仅仅是做了一个初始化的操作,的项目里的文件还没有被跟踪。可用通过git addgit commit进行仓库构建。

git init            #在当前目录下新建仓库

克隆已有仓库 @ clone

可以通过git clone克隆一个已经存在的git仓库的完整拷贝。拷贝会在你当前文件夹下新建一个仓库名称的文件夹然后把仓库内容完整拷贝进去。

# 用法
git clone <选项> -- <仓库> <路径>

# 参数
-l, --local           # 从本地仓库克隆
--single-branch       # 只克隆一个分支、HEAD 或 --branch

# 例子
git clone https://github.com/libgit2/libgit2  
#在当前文件夹下创建一个名为libgit2 的目录并创建一个初始仓库
git clone https://github.com/libgit2/libgit2 mylibgit  
#在mylibgit文件夹下创建
git clone git@gitee.com:veryqun/super_test.git /Users/chenchaoqun/SUPER_QUN/git_test/hhaah  
#在制定路径下创建

记录更新

文件状态 @ status

在对本地文件操作后,可以通过git status查看文件状态

# 用法
git status <参数>

# 参数
-s                  #以简洁的格式显示状态
--long              #以长格式显示状态(默认)

文件状态:

?? 4.txt: 工作区新添加文件,未追踪
A 4.txt: 对文件追踪,添加到缓存区。
AM 4.txt: 在工作区对添加到缓存区的文件进行修改,还未提交时状态

跟踪新文件 @ add

对于新创建的文件,文件是处于untrack状态,可以使用命令 git add 开始跟踪一个文件。

# 用法
git add <参数>

# 参数
-v,--verbose          # 冗长输出,如果添加了新文件会返回添加信息。
-f, --force           # 允许添加忽略的文件
-u, --update          # 更新已跟踪的文件
-A, --all             # 添加所有改变的已跟踪文件和未跟踪文件

忽略文件

对于不希望加入跟踪列表的,可以在仓库目录或者仓库中资源文件夹下建立.gitignore文件,可以在文件中输入要忽略的文件。支持正则表达。

# 例如
*.[oa]      #忽略所有以 .o 或 .a 结尾的文件
*~          #忽略所有名字以波浪符(~)结尾的文件
!lib.a      #即使规定了忽略*.a 但是对lib.a除外
/TODO       #忽略当前目录下的TODO文件 而对于其他目录下的TODO则不忽略
build/      #忽略任何目录下名为 build 的文件夹
doc/*.txt   #忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/**/*.pdf    #忽略 doc/ 目录及其所有子目录下的 .pdf 文件

文件比对 @ diff

通过git status可以查看哪些文件被修改而没有提交,或者提交后修改。可以通过git diff来具体查看文件哪里不同。

# 用法
git diff <参数> <file_1> <file_3>

# 参数
--cached        # 比对已暂存文件与最后一次提交的文件差异

查看工作区和缓存区的文件差异:git diff
直接使用git diff查看工作区和缓存区的文件差异,会列出所有差异的文件和差异内容。可以指定文件查看特定文件差异。
此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。 也就是修改之后还没有暂存起来的变化内容。

比较暂存文件与最后一次提交的文件差异:git diff --cached

提交更新 @ commit

在确定后缓存区文件正确后可以使用git commit进行提交。提交时候加上参数-m来对本次提交进行注释

# 用法
git commit [<选项>] [--] <路径规格>...

# 参数
-a,--all                #提交所有改动的文件,使得不用git add追踪文件 

-q, --quiet            # 提交成功后不显示概述信息
-m,--message <说明>    # 提交说明
-o, --only            # 只提交指定的文件
--dry-run             # 显示将要提交的内容

# 例子
git commit -m "第二次提交_22:10"
git commit -a -m "第二次提交_22:10"      #不用单独使用git add

移除文件 @ rm

  • 工作区移除,直接使用rm <选项> <file>命令移除文件,但是如果文件已经提交,移除后还需要从缓存区删除
  • 使用git rm进行移除缓存区的文件。
    • 如果工作区文件未删除,直接删除缓存区,会提示错误。应该先删除工作区文件,再删除缓存区文件。
    • 如果本地文件和缓存区文件一致,使用git rm --cached <file>删除缓存区文件而保留工作区文件(适合删除不小心添加不必要的文件到缓存区但是还没提交)。
    • 如果要删除缓存区和工作区有差异的文件,或强制删除工作区与暂存区的文件,则必须使用强制删除选项 git rm -f
  • git支持通配符* 但是需要用\转义。eg.git rm log/\*.log(删除 log/ 目录下扩展名为 .log 的所有文件)
# 用法
git rm [<选项>] [--] <文件>...

# 参数
-n, --dry-run         #演习
--cached              #只从索引区删除
-f, --force           #忽略文件更新状态检查
-r                    #允许递归删除

# 例子
rm 23_20.txt & git rm 23_20.txt     # 在本地和缓存区删除文件
rm -f a.txt                         #强制删除本地和缓存区文件

移动文件/重命名 @ mv

对于已经提交过仓库,如果需要对文件重命名,可以使用git mv <o_name> <n_name>来实现工作区和缓存区的重命名。

# 例子
git mv <old_name > <new_name>   #对工作区和缓存区文件重命名

查看提交历史 @ log

git 可以提供提交历史的信息。使用git log命令查看提交历史等诸多详细信息。

git log 输出格式


git log
# 按时间先后顺序列出所有的提交,命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明


git log -p <-n>
git log -p -2       #例子
#显示n次最近提交的日志,详细记录每次提交的差异。如果不指定n则默认全部展示 eg.


git log --stat
#看到每次提交的简略统计信息展示出了git log提供信息外,还展示了被修改过的文件、有多少文件被修改了以及被修改过 的文件的哪些行被移除或是添加了。


git log --oneline 
# 将每个提交放在一行显示,只展示commiID和 提交信息 以及HEAD指针指向


git log --pretty=<参数>
git log --pretty=oneline        #例子
git log --pretty=format[选项内容]
git log --pretty=format%H       #例子 只展示每次提交的完整哈希值
# 可以自己选择展示信息的内容


git log --oneline --graph
# 形象展示分支合并信息
# 例子 
$ git log --stat

commit a11bef06a3f659402fe7563abf99ad00de2209e6 
Author: Scott Chacon <schacon@gee-mail.com> 
Date: Sat Mar 15 10:31:28 2008 -0700

first commit

          README | 6 ++++++
        Rakefile | 23 +++++++++++++++++++++++ 
lib/simplegit.rb | 25 +++++++++++++++++++++++++ 
3 files changed, 54 insertions(+)

附:
git log --pretty=format 常用的选项

附:
git log 的常用选项

git log的输出过滤

git log输出格式确定后,可以通过限制最近n次提交、时间段、提交者等信息进行输出限定。
例如类似 --since 和 --until 这种按照时间作限制的选项很有用,git log --since=2.weeks表示最近两周的所有提交。该命令可用的格式十分丰富——可以是类似"2008-01-15"的具体的某一天,也可以是类似"2 years 1 day 3 minutes ago"的相对日期。

附:

另外请允许鄙人推广一下,因为我的笔记分布CSDN、简书、知乎专栏等比较零散,管理起来比较麻烦,因此鄙人前几天终于思考再三申请了一个 微信公众号,会更加方便地发布更多有关生信息、统计方面内容,如果你觉得有需要欢迎关注。公众号如下:

我的微信公众号:进击的大肠杆菌

我想建立并管理一个高质量的生信&统计相关的微信讨论群,如果你想参与讨论,可以添加微信:veryqun 。我会拉你进群,当然有问题也可以微信咨询我。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值