有用的 Git 命令

以下命令可能可以帮助到您。您可能不需要经常使用它们。

远端

将另一个 URL 添加到远端,以便在每次推送时更新两个远端

git remote set-url --add <remote_name> <remote_url>

暂存和恢复更改

删除最后一次提交并将更改保留在未暂存状态

git reset --soft HEAD^

从 HEAD 取消一定数量的提交

To unstage 3 commits, for example, run:

git reset HEAD^3

从 HEAD 取消对某个文件的暂存更改

git reset <filename>

将文件恢复为 HEAD 状态并删除更改

有两个选项可以恢复对文件的更改:

  • git checkout <filename>
  • git reset --hard <filename>

通过创建新的替换提交来撤消之前的提交

git revert <commit-sha>

为上次提交创建一条新消息

git commit --amend

将文件添加到最后一次提交

git add <filename>
git commit --amend

如果您不想编辑提交消息,请将 --no-edit 附加到 commit 命令。

隐藏

隐藏更改

git stash save

stash 的默认行为是保存,所以您也可以只使用:

git stash

取消隐藏您的更改

git stash apply

丢弃您隐藏的更改

git stash drop

应用和删除您隐藏的更改

git stash pop

Refs 和日志

使用 reflog 显示对 HEAD 的引用更改日志

git reflog

检查文件的 Git 历史记录

检查文件的 Git 历史记录的基本命令:

git log <file>

如果您收到此错误消息:

fatal: ambiguous argument <file_name>: unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:

使用它来检查文件的 Git 历史记录:

git log -- <file>

查找包含特定 SHA 的标签

git tag --contains <sha>

检查对文件的每次更改的内容

gitk <file>

检查每个文件更改的内容,跟随它过去的文件重命名

gitk --follow <file>

Debugging

为 Git 命令使用自定义 SSH 密钥

GIT_SSH_COMMAND="ssh -i ~/.ssh/gitlabadmin" git <command>

Debug 克隆

使用 SSH:

GIT_SSH_COMMAND="ssh -vvv" git clone <git@url>

使用 HTTPS:

GIT_TRACE_PACKET=1 GIT_TRACE=2 GIT_CURL_VERBOSE=1 git clone <url>

使用 Git 嵌入式跟踪进行调试

Git 包含一套完整的调试 Git 命令的跟踪,例如:

  • GIT_TRACE_PERFORMANCE=1:启用性能数据的跟踪,显示每个特定的 git 调用需要多长时间。
  • GIT_TRACE_SETUP=1:启用跟踪 git 正在发现的关于它正在交互的仓库和环境的内容。
  • GIT_TRACE_PACKET=1:为网络操作启用数据包级跟踪。

变基

将您的分支变基到默认分支上

-i 标志代表“交互式”。将 <default-branch> 替换为您的默认分支的名称:

git rebase -i <default-branch>

如果暂停,继续变基

git rebase --continue

使用 git rerere

在重复时重用记录的相同问题的解决方案:

git rerere

要启用 rerere 功能:

git config --global rerere.enabled true