Linux — Git

分支管理必读 #

A successful Git branching model

Github 网络问题 #

如果在本地 Terminal push 不上去代码,可以尝试在 /etc/hosts 中加入下面代码,明确指定 github.com 的 IP 地址。

140.82.112.4 github.com

另外也可以尝试修改 DNS,防止被污染。

Commit Message 规范 #

  • Feat 新功能(feature)
  • Fix 修补bug
  • Docs 文档(documentation)
  • Style 格式(不影响代码运行的变动)
  • Refactor 重构(即不是新增功能,也不是修改 Bug 的代码变动)
  • Test 增加测试
  • Chore 构建过程或辅助工具的变动

尽量大写,看起来美观一些。

自动生成 Change Log #

使用这个项目 conventional-changelog

npm install -g conventional-changelog
cd my-project
conventional-changelog -p angular -i CHANGELOG.md -w

ps:有适用于 vscode 等编辑器的插件。

参考 Commit message 和 Change log 编写指南 - 阮一峰的网络日志

工作区、暂存区、缓冲区 #

工作区 #

暂存区 #

缓冲区 #

git submodule #

Git - 子模块

git submodule add <repository> <path> #添加子模块
git submodule init                    #初始化子模块
git submodule update                  #更新子模块
git submodule foreach git pull        #拉取所有子模块

更新本地submodule代码为最新

git submodule update --recursive --remote

如果你已经克隆了项目但忘记了 —-recurse-submodules,那么可以运行 git submodule update —-initgit submodule initgit submodule update 合并成一步。如果还要初始化、抓取并检出任何嵌套的子模块, 请使用简明的 git submodule update —-init —-recursive

push 了错误的文件 #

需要恢复到上一次的修改到缓冲区,

把 HEAD 指到上一版

git reset --soft HEAD^

修改文件

维持上次 commit 的信息

git commit -a -c ORIG_HEAD

强制 push

git push origin {your-branch} -f

rebase #

rebase 的提交会破坏 Git 的时间线,是一种对外部分支不安全的提交方式,尽量只在自己分支用。

下游分支更新上游分支内容的时候使用 rebase

上游分支合并下游分支内容的时候使用 merge

更新当前分支的内容时一定要使用 --rebase 参数

合并最后四个 commit,最后提交的时候需要 push -f

git rebase -i HEAD~4

彻底搞懂 Git-Rebase - Jartto’s blog

GIT使用rebase和merge的正确姿势 - 知乎

GitHub 技巧 #

Commit message 可以通过 #13 这样的字符串指定 PR 或 Issue,Github 中大多项目尤其喜欢在 message 后面用括号专门包起来,比如 Fix xxx problem (#13)

fast-forward #

git merge 时默认是 fast-forward 方式。而 --no-ff 指的是强行关闭 fast-forward 方式,即会产生一个 merge commit。

推荐链接 #

https://github.com/geeeeeeeeek/git-recipes

本文共 789 字,上次修改于 Jul 9, 2024
相关标签: Linux, Shell, Tools