Skip to content

Git 命令指南

switch 和 restore

参考文章 Git 新命令 switch 和 restore

合并 commit

参考文章 Git 合并多个 commit,保持历史简洁

git blame

  • git blame <file>:查看文件修改

git stash

git stash 会将所有没有 commit 提交(包含暂存区)的内容保存起来,形成一个栈列表(先进先出)

  • git stash:将所有没有 commit 提交的内容保存到栈列表中
  • git stash save <message>:同上且附上 message
  • git stash list:查看存储栈列表
  • git stash pop:出栈恢复到工作区
  • git stash applygit stash apply@{0}:出栈索引第 0 个

修改历史 commit 的邮箱

比如 HEAD 指针之前的第 N 个 commit 需要修改提交的作者和邮箱,就可以通过 rebase 来操作

sh
git rebase -i HEAD~N

会让你对这 N 个 commit 进行操作,将其中需要修改邮箱的节点的 pick 修改为 edit ,保存退出。

此时就开始进行 rebase 的时光回溯状态,开始修改第一个 edit 的 commit,对它进行重新提交操作

sh
git commit --amend \
--author="codenoy <48537416+codenoy@users.noreply.github.com>"

修改并重新--amend 重新 commit ,提交后就可以往下继续 rebase 操作

sh
git rebase --continue

如果此刻还有其它需要 edit 的 commit,就会继续对本次 commit 进行操作,如果没有本次 rebase 就算完成操作了,commit tree 也会变成修改后的状态。

如果是大批量的修改 commit 提交邮箱和用户名,可以使用脚本。

sh
git filter-branch --env-filter '
OLD_EMAIL="48537416+lunode@users.noreply.github.com"
CORRECT_NAME="lunode"
CORRECT_EMAIL="48537416+lunode@users.noreply.github.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

如果出现问题,可能是有内容没有提交,又或者是其它问题,可以添加 -f 参数,强制更新。

sh
git filter-branch -f