Git学习总结1

以下Git学习内容,来自官方文档,本文整理学习过程笔记。

Git基础

环境配置

  1. 设置用户信息

    • git config --global user.name "XXX"
    • git config --global user.email "YYY"
  2. 配置文件

    • 全局配置文件: /etc/gitconfig,包含系统每个用户以及他们仓库的通用配置。
    • 当前用户配置文件: ~/.gitconfig
    • 当前仓库的配置文件: .git/config ,针对该仓库有效。
  3. 查看当前配置

    • git config --list
  4. 查看命令帮助,以git add为例子。执行 git add -h

  5. Git别名。
    可通过git config文件来轻松为每一个命令设置一个别名

    
    	git config --global alias.co checkout
    	git config --global alias.st status
    	git config --global alias.br branch
    
    
  6. 设置git的默认提交模板文件,git config --global commit.template ~/.gitmessage.txt

不同平台的换行格式化功能
Windows平台上使用CRLF来结束一行,linux平台上使用LF。Git可以在你提交时自动将回车和换行转换为换行,而在检出代码时将换行换回回车和换行。
在windows平台上,设置如下选项:

git config --global core.autocrlf true

在Linux平台上,不需要Git在检出文件时进行自动转换。然而当一个以回车加换行作为行结束符的文件不小心被引入时,Git能不能修正呢?可以,通过

git config --global core.autocrlf input

让git只在捡入时进行转换,检出时不再转换。
如果仅仅是在windows平台上开发项目,可将此项设置为false,在版本库中保留回车换行符号。

git config --global core.autocrlf false

忽略文件

在仓库根目录下新建.gitignore文件,列出要忽略的文件模式匹配符,以免将来误提交这类无用文件。

GitHub有一个十分详细的针对数十种项目及语言的.gitignore文件列表

全局忽略文件,通过以下命令来设置

git config --global core.excludesfile ~/.gitignore_global

~/.gitignore_global中进行编辑,使之全局有效,所有版本库都保持一样的忽略文件列表。

以下是一个简单例子:

 
	 # 忽略所有的 .a 文件
	*.a
	
	# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
	!lib.a
	
	# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
	/TODO
	
	# 忽略任何目录下名为 build 的文件夹
	build/
	
	# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
	doc/*.txt
	
	# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
	doc/**/*.pdf
 

基础操作

  1. 查看当前Git状态:git status
  2. 新增文件到暂存区:git add fileName
    • git add:
      1. 用于跟踪新文件
      2. 将已跟踪的文件放到暂存区。
      3. 合并时,把有冲突的文件标记为已解决状态。
  3. 从暂存区中去掉暂存:git reset fileName
  4. 提交暂存区文件到本地仓库: git commit -m "comment"
  5. 合并1和3的操作,git commit -a -m "comment"
  6. 比较差异
    • git diff: 比较工作目录和暂存区域快照之间的差异。(如果全部add的话,git diff不会显示差异)
    • git diff --staged:比较暂存区域快照和仓库之间的差异。
    • git diff --check: 检测未暂存的文件是否有空白提交错误
    • git commit:启动默认文本编辑器来输入提交说明。可以通过-m选项将提交信息与命令放在同一行。提交说明为空时会禁止提交。
    • git commit -m "XXXX: Fix benchmarks for speed."
      • 提交信息应当少于50个字符(25个汉字)的单行开始且简要地描述变更,接着是一个空白行,再接着是一个更详细的解释。分隔摘要与正文是必须的,如果将两者混合在一起,那么类似变基等工具无法正常工作。
        *在提交描述中输入 #<编号>,可引用任何一个PR请求或者Issue编号。
  7. 删除跟踪文件:git rm
  8. 文件重命名: git mv Afile BFile

查看提交历史

git log默认情况下,会按照时间先后顺序列出所有提交,最近的更新排在最上面。该命令有许多选项,此处列出其最常用的选项:

  • -p:显示每次提交所引入的差异(按补丁的格式输出),当进行代码审查,或者快速浏览某次提交所带来的变化时,很有用。
  • -n:显示最近的n次提交。
  • --stat:查看每次提交的简略统计信息
  • --pretty:以不同方式展示提交历史,有很多子选项可供使用。
  • oneline:每个提交放在一行显示
  • format:定制记录的显示格式,有助于提取日志分析。
    • git log --pretty=format:"%h - %an, %ar : %s"
      • %h:提交的简写哈希值
      • %an:作者名字
      • %ar:作者修订日志,按多久之前的方式显示
      • %s: 提交说明
  • --graph:在输出日志旁以ASCII图形显示分支与合并历史
  • --since:按时间做限制,例如: --since=2.weeks,列出最近两周的所有提交。类似的有until,在指定时间之前的提交。
  • --author:显示指定作者的提交
  • --grep:搜索提交中的关键字
  • -S function_name: 找出添加或删除某个特定函数引用的提交
  • -- file/dir_path:只关心某个文件或目录的历史提交,将该路径选项放到最后位置。
  • --no-merges:排除掉合并提交
  • --decorate:查看各分支当前所指的对象

git log master..experiment:想查看experiment分支中海油哪些提交尚未合并入mater分支

git log origin/master..HEAD查看即将推送到远端的内容与实际远端的差异。输出在当前分支中,而不再远程origin分支中的提交。

修改上次提交

有时候提交完后发现漏提交文件,或者提交信息写错,此时,可以运行带 --amend 选项来重新提交。

git commit --amend

这样可以修改前一次提交的信息,同时将本次提交的修改合并到前一次中,在log中只保留一条记录。

修复提交最明显的价值是可以稍微改进最后的提交,而不会让“啊,忘了添加一个文件”或者“小修补,修正笔误”这种提交信息扰乱你的仓库历史。

打标签

Git可以给仓库历史的某次提交打上标签,以示重要,比如V1.0V2.0等等。

列出已有标签: git tag -l “XXMatch”,可根据字符串来搜索匹配的标签

Git支持两种标签,

  • 轻量标签,它是某个特定提交的引用
    • git tag v1.4。只显示提交信息,不会显示打标签的作者信息。
  • 附注标签:支持打标签者名字、邮件、日期和标签信息。建议用这种。
    • git tag -a 标签名称 -m "remark"
    • 给指定提交打上标签,先用 git log --pretty=oneline 查看提交历史,得到特定提交的部分校验和,然后执行 git tag -a 标签名称 校验和 -m "remark"

git show 标签名称: 查看标签和与之对应的提交信息。

默认情况下,标签不会推送到远程服务器,可使用

  • git push origin <tagname>,推送单条标签
  • git push origin --tags,推送多条标签

删除本地标签:git tag -d
删除远程标签:git push origin --delete

如果需要查看某个标签的版本,并修复该版本中的错误,通常需要据此标签创建一个新分支,在此分支上进行提交。git checkout -b version2 tagname

posted @ 2021-08-18 14:19  浩天之家  阅读(91)  评论(0编辑  收藏  举报