git#

常用命令#

日志#

git log --oneline --graph --all
git log --oneline -10

# 查看最近的操作记录
git reflog

# 找到被删除分支的最后一个提交
git checkout <commit-hash>

# 基于该提交创建新分支
git checkout -b <branch-name>

合并特定文件或者目录#

# 合并特定文件
git checkout <branch> -- <file-path>

# 合并特定目录
git checkout <branch> -- <directory>/*

# 使用merge-file合并特定文件
git show <branch>:<file> > temp_file
git merge-file <current-file> <original-file> temp_file
rm temp_file

推送远程#

# 先拉取远程更改
git fetch origin
git merge origin/main

# 或使用pull一步完成
git pull origin main

# 解决可能的冲突后再推送
git push origin main

# 如果确定要强制推送(谨慎使用!)
git push --force origin main

# 更安全的强制推送方式
git push --force-with-lease origin main

取消暂存文件#

# 取消特定文件的暂存
git restore --staged <file>
# 或旧版Git
git reset HEAD <file>

# 取消所有文件的暂存
git restore --staged .
# 或旧版Git
git reset HEAD

子模块#

# 查看
git submodule status
# 添加
git submodule add https://github.com/example/submodule.git submodule
# 更新
git submodule update --init submodule

# 正常情况下这三步可以删除
git submodule deinit submodule
git rm submodule
git commit -m "Remove submodule"

# 可能修改提交过:是否有 gitlink
git ls-files --stage | grep my-submodule
git rm --cached my-submodule

# 实在不行手工检查
rm -rf .git/modules/my-submodule
vim .git/config
vim .gitmodules

分支管理#

Git主分支(保留分支):master、develop

主要分支:Master和Develop。前者用于正式发布,后者用于日常开发。

Git辅助分支(临时分支):feature、release、fixbug

除了常设分支以外,还有一些临时性分支,用于应对一些特定目的的版本开发。临时性分支主要有三种:

功能(feature)分支

预发布(release)分支

修补bug(fixbug)分支

# 拉去远程分支信息
git fetch --all

# 根据远程分支创建本地分支
git checkout -b dev origin/dev

# 切换到 Master 分支
git checkout master

# 对 Develop 分支进行合并
git merge --no-ff develop
# 对合并生成的新节点,做一个标签
git tag -a 2.5

# 删除 Develop 分支
git branch -d develop

rebase

git pull --rebase origin main

# 提示冲突后
git status                  # 看哪些文件冲突
vim 冲突文件                 # 手动解决
git add 冲突文件
git rebase --continue       # 继续(注意:不用 git commit)

# 想放弃这次 rebase,回到操作前
git rebase --abort

当前代码有未提交,又想拉新代码:

# 方式一:先提交
git add .
git commit -m "commit message"

# 方式二: 暂存
git statsh
git pull
git statsh pop

## 方式三:丢弃修改
git restore .

修改刚刚的提交

# 保留更改,但撤销提交
git reset --soft HEAD^

# 完全丢弃更改和提交
git reset --hard HEAD^

# 修改上一次提交(而不是撤销)
git commit --amend

# 修改最近一次提交的信息
git commit --amend -m "新的提交信息"

# 修改历史提交信息
git rebase -i HEAD~n
# 将要修改的提交前的"pick"改为"reword"
# 保存并退出,然后在出现的编辑器中修改信息

常用配置#

# 设置全局用户信息
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 或者仅为当前仓库设置
git config user.name "Your Name"
git config user.email "your.email@example.com"

# 配置Git自动处理行尾符
git config --global core.autocrlf true  # Windows
git config --global core.autocrlf input # Mac/Linux

# 为当前仓库设置
git config core.autocrlf true

# 对现有文件进行规范化
git add --renormalize .

# 中文文件名显示为八进制转义码:配置Git不对文件名进行引用
git config --global core.quotepath false

提交规范#

commit message = subject + :+ 空格 + message 主体

feat: 新功能(feature) fix: 修补bug refactor: 代码重构 docs: 文档(documentation) style: 格式(不影响代码运行的变动) test: 增加测试 chore: 构建过程或辅助工具的变动 revert: 回滚到上一个版本
perf: 性能优化 chore: 构建过程或辅助工具的变动 build: 影响构建系统或外部依赖项的更改 ci: 更改持续集成文件和脚本