Git基础

Git基础#

如需查看详细版本,请翻阅:https://git-scm.com/book/en/v2

1. 获取仓库#

  1. 从已存在目录中初始化仓库

    Copy
    // 基础版 git init
  2. 克隆现有的仓库

    Copy
    // 基础版 git clone https://github.com/libgit2/libgit2 // 指定本地目录名 git clone https://github.com/libgit2/libgit2 mylibgit // 克隆仓库以及其所有的子模块 git clone https://github.com/libgit2/libgit2 --recursive

2. 基础提交命令的使用#

  1. 查看仓库状态

    Copy
    // 基础版 git status // 精简输出结果 git status --short
  2. 跟踪文件(将已跟踪的文件放入暂存区)

    Copy
    // 基础版 git add readme.md // 直接添加所有本地被修改的文件 git add .
  3. .gitignore文件的使用

    Copy
    # 忽略所有的 .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

    GitHub有一个针对大多数语言的.gitignore文件列表:https://github.com/github/gitignore

  4. 查看已暂存和未暂存文件之间的差异(这个一般用图形化的工具查看比较方便)

    Copy
    // 查看未暂存的提交更新了哪些内容 git diff // 查看暂存区和最后一次提交的文件差异 git diff --staged
  5. 删除文件(从暂存区移除,然后提交)

    Copy
    // 从工作目录中删除文件 rm README.md // 记录此次删除文件的操作 git rm README.md // 从暂存区移除,但是在当前工作目录中保存 git rm --cached README.md // 删除当前目录下所有名字以~结尾的文件 git rm \*~
  6. 移动文件(相当于重命名操作)

    Copy
    // 对文件重命名 git mv README.md MEREAD.md // mv命令的本质相当于运行了以下三条命令 mv README.md MEREAD.md git rm README.md git add MEREAD.md

3. 和Log相关的命令#

  1. 查看log
Copy
// 基础版 git log // 查看指定数量的提交 git log -n // 显示每次提交的差异 git log -p(-patch) // 格式化输出 git log --pretty=oneline git log --pretty=format: "%h - %an, %ar : %s" // 显示最近一段时间的所有提交 git log --since=2.weeks // 指定作者 git log --author=yaya

Git Log常用的格式化输出选项如下:

%H 提交的完整哈希值
%h 提交的简写哈希值
%T 树的完整哈希值
%t 树的简写哈希值
%P 父提交的完整哈希值
%p 父提交的简写哈希值
%an 作者名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 --date=选项 来定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期(距今多长时间)
%s 提交说明

Git Log的常用选项如下:

选项 说明
-p 按补丁格式显示每个提交引入的差异。
--stat 显示每次提交的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。
--relative-date 使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。
--graph 在日志旁以 ASCII 图形显示分支与合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。
--oneline --pretty=oneline --abbrev-commit 合用的简写。

显示Git Log输出的常用选项如下:

选项 说明
-n 仅显示最近的n条提交
--since,--after 仅显示指定时间之后的提交
--until,--before 仅显示指定时间之前的提交
--author 仅显示作者匹配指定字符串的提交
--committer 仅显示提交者匹配指定字符串的提交
--grep 仅显示提交说明中包含指定字符串的提交
-S 仅显示添加或删除内容匹配指定字符串的提交

4. 和撤销相关的命令#

注意,有些撤销操作是可逆的,但是有些撤销操作是不可逆的,需要谨慎操作。

Copy
// 修改最新的一次提交的提交内容(本质上是用另一个提交覆盖之前的提交) git commit --amend // 取消暂存的文件 git reset HEAD CONTRIBUTING.md // 撤销对文件的修改(极其危险的命令,无法恢复) git checkout -- CONTRIBUTING.md

5. 和“远程”仓库相关的命令#

远程表示仓库不在你本地的主机上

Copy
// 查看已经配置的远程仓库服务器 git remote // 显示远程仓库的简写名字以及其对应的URL git remote -v

git remote命令会列出你指定的每个远程服务器的简写,如果你已经克隆了自己的仓库,那么至少会看到origin,因为这个git给你克隆的仓库服务器的默认简写名字。

Copy
// 给本地仓库添加远程仓库(后续可以用字符串<shortname>来代替URL) git remote add <shortname> <url> // 从远程仓库中获取数据,执行之后可以拥有那个远程仓库的所有分支的引用,并且随时查看和合并 git fetch <shortname> // 推送到远程仓库 git push <shortname> <branch> // 查看某个远程仓库的具体信息 git remote show <shortname> // 修改一个远程仓库的简写名字 git remote rename old_name new_name // 移除一个远程仓库 git remote remove <shortname>

6. 打标签#

和其他版本控制系统(VSC)一样,Git可以给仓库历史中的某个提交打上标签,用来表示一些信息。通常我们会用这个功能来标记发布节点(v1,v2)。

Copy
// 列出标签 git tag // 根据特定的模式查找标签 git tag -l "v1.8.5*"
Copy
// 创建一个附注标签 git tag -a v1.4 -m "version 1.4" // 查看标签信息以及对应的提交信息 git show v1.4 // 创建一个轻量标签 git tag v1.4-1w // 显示轻量标签 git show v1.4-1w

Git支持创建两种标签,轻量标签——lightweight和附注标签——annotated

轻量标签只是某个特定提交的引用,本质上是把提交校验存储到一个文件中,没有保存任何其他的信息。附注标签是存储在Git数据库中的一个完整对象,通常我们使用附注标签。

Copy
// 后期补充标签 git tag -a v1.2 <commit_id>
Copy
// 推送本地指定标签 git push origin v1.5 // 推送本地全部标签 git push origin --tags // 删除本地标签 git tag -d v1.5 // 删除远程标签 git push origin --delete <tagname>

注意,git push命令默认不会推送标签到远程服务器上。而且推送标签会同时推送lightweight和annotated,没有选项可以只选择推送其中一种标签。

Copy
// 检出标签,查看对应标签指向的文件版本 git checkout v1.5

git checkout命令会让你的仓库处于detached head状态(分离头指针),这个状态下如果你做了一些修改并且提交,你的标签不会发生任何变化,而且新的提交也不属于任何分支,并且无法访问,只能通过确切的提交哈希才可以访问他们,因此,不建议在分离头指针状态下进行修改并提交

7. Git命令别名#

通过Git命令别名,可以让你的Git体验更加简单,容易熟悉。

Copy
// 给checkout命令起别名 git config --global alias.co checkout // 给commit命令起别名 git config --global alias.br branch

不仅可以给现有的命令关键字起别名,还可以整合参数

Copy
git config --global alias.unstage 'reset HEAD --' // 下面两个命令等价 git unstate fileA git reset HEAD -- fileA // 简单的获取第一个log: git last git config --global alias.last 'log -1 HEAD'
posted @   风雅yaya  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示
CONTENTS