git的笔记

Seroton Karlbaey 2026-08-22 23:23 1

总是忘记 git 命令,而且 git 帮助文档要么词不达意,要么要开浏览器阅读,想一下遂写下这个 git 常用命令,供我速查。


当然如果与 GitHub 深度集成的话,更推荐的做法是用 gh(GitHub CLI),我以后再想吧。


(因为是给 grep 之类的搜索工具用的,可读性较差)


获取代码库


使用 git clone


git clone https://g.karlbaey.top/repos/blog.git ./blog

通过 HTTPS 把 https://g.karlbaey.top/repos/blog.git 的 git 仓库克隆到 ./blog 文件夹。


GitHub 提供 SSH 协议的链接,只要把 https://... 的链接替换即可。


修改代码


暂存区


使用 git add


git 有暂存区(Staging Area),git add 把修改过的文件放到暂存区里。


-n(–dry-ru[n])看看哪些文件会被加入暂存区。


-N(–inte[N]t-to-add)把新增文件放进暂存区占位,不存内容。


上面两个命令都不单独使用,一般和下面的命令结合起来用。


git add .当前目录以及子孙目录所有修改过的文件放入暂存区。


-A(–[A]ll)类似,该命令不论在项目的哪级目录执行,相当于在仓库根目录执行 git add .


通常不这么做,假如同时修改了文档和代码,应该分为两个提交更好。


-p(–[p]atch)交互式提交新文件。



  • [y]es 保存这一代码差异块(hunk)

  • [n]o 不保存这一 hunk

  • [q]uit 退出,不处理剩余的 hunk(已选择 y 的 hunk 仍然会保留)

  • [d]one 跳过当前修改块以及该文件后面所有的修改块

  • [s]plit 拆分当前的修改块,如果这个块包含多处修改,git 会把它切得更小,便于逐行或逐小段地精细选择

  • [e]dit 手动编辑当前的修改块,让 git 暂存部分行

  • [?]help 显示帮助,列出所有可用选项的详细说明


-i(–[i]nteractive)也是交互式,就是选项更多。


提交代码


使用 git commit


commit 会把暂存区里的内容通通持久化,这时候即使仓库里的代码被删了,也可以很方便地恢复代码。


git commit -n(–dry-ru[n])看看哪些文件会被提交。


写提交信息


使用 git commit


-m <MESSAGE>(–[m]essage)提交并填写提交信息。


-m <TITLE> -m <CONTENT> 同上,但是两个 -m flag 后的信息会用个空行串联。也就是:


<TITLE>

<CONTENT>

<CONTENT> 可以用 \n 作为换行符。


也可以不写提交信息,但是,为了避免不知道某提交是干什么的,还是写一下比较好。


修改提交信息


使用 git commit --amend <NEW_TITLE>


修改上一次提交,并把当前暂存区里的内容也吸收进上一个提交。添加 --no-edit 来避免吸收暂存区内容。


如果已经 push 过仓库就不能避免强制 push。


查日志


使用 git log


不带任何 flag 和 subcommand 就交互式阅读日志,阅读交互逻辑默认和 less 类似。


--oneline -<n> 显示从当前往前 <n> 个提交,每个只显示单行。


--oneline -- <FILENAME> 查看 <FILENAME> 的修改记录。


--oneline --grep=<KEYWORD> 查看包括 <KEYWORD> 的提交记录。


--oneline --author=<NAME> 查看作者为 <NAME> 的提交记录。


gitk 开 GUI 看日志。


找出屎山作者


使用 git blame


git blame <FILENAME> 这是基础命令,在 <FILENAME> 里找修改者。


-L 查找某几行。10,20 表示第 10 行到第 20 行,10,+10 表示第 10 行往后的 10 行。


-w 忽略空格([w]hitespace)修改,用来避免格式化工具导致的误会。


-C 检查同文件内移动的代码。


-C -C 检查跨文件移动的代码。


--date= 日期格式化,relative(相对时间)和 short(仅日期)已经够用。


找完屎山之后用 git show <HASH> 查看提交详细内容。


这个我现在用不到,有备无患,因为还没遇到过我以外的人写屎山……


改分支


使用 git branch


<BRANCH> 创建新分支。


-l 列出所有分支。


-d 删除分支。只有在分支已合并后才能删。-D 强制删除。


或者 git switch


-c <BRANCH> 创建并切换到新分支。


- 跳回上一个分支。


合并分支


使用 git merge,或者 git rebase


后者避免出现分支交错。


git rebase -i 交互式 rebase。


部分指令:



  • p pick 保留提交

  • e edit 修改代码

  • s squash 合并到上一个提交并保留信息

  • f fixup 合并到上一个提交并丢弃信息

  • d drop 删除提交


解决分支冲突要打开文件,删掉 <<<<<<< 之类的标记符,然后 git add 文件,继续 git rebase --continue


--skip 等于 drop 这个提交。


---abort 放弃 rebase,回到一开始。


推送代码


使用 git push


origin <BRANCH> 指定分支名。


-u(–set-[u]pstream)推送并建立上游关联。


比如 git push -u origin feature/fix-logic


--tags 把标签一起推。


打标签


使用 git tag


git tag v0.1.0 创建标签。


git tag -a v0.1.0 -m blabla 附注标签,包括标签的详细内容。


git tag 全部列出。


git tag -l "v1.*" 只看 v1.x 系列。


-d <TAGNAME> 删标签。


git push origin <TAGNAME> 推代码不会自动推标签。


拉取代码


使用 git pull


--rebase 拉完仓库之后开始 rebase。


git pull == git fetch + git merge


简写命令


使用 git config alias.XX COMMAND


比如 git config alias.lg "log --all --graph --oneline --decorate"


常用 flag


--dry-run 看执行效果,但不执行。


--prune 按照远端仓库清理本地分支。


另外的部分


修改配置用 git config



  • user.name 提交者名字

  • user.email 提交者邮箱

  • fetch.prune 是否自动清理

  • http.proxy 设置 HTTP 代理

最新回复 (6)
  • 屋顶橙子味 08-23 00:22
    1

    建议新增一条git clone --mirror,作用为克隆裸仓库(包含完整的commit提交记录)

  • Easy Talk 08-23 00:51
    2

    话说github cli的用途是什么?不会就是copilot吧?

  • Seroton Karlbaey 楼主 08-23 00:55
    3

    不用打开浏览器就能和 GitHub 互动。

  • sysescool 08-27 17:13
    4

    没必要记这么多命令,但 git 相关的概念要知道,几大区,分支,tag,对象,头节点等等。

    命令只需要记住:


    git <command> -h

    以及


    git help -m <command>

    就可以了。


    能看懂 usage 描述就行:


    usage: git clone [<options>] [--] <repo> [<dir>]

    [] 表示可选,<> 表示必选

  • 屋顶橙子味 08-28 23:50
    5

    (帖子已被作者删除)

  • 屋顶橙子味 08-28 23:50
    6

    好奇一下Topic Owner为什么这么安静 ^-^

* 帖子来源Linux.do
返回