发布于 2026-01-05 10 阅读
0

每个人都应该知道的十大 Git 命令

每个人都应该知道的十大 Git 命令

本文将介绍我几乎每天都会用到的 10 个最常用的 Git 命令。如果你是编程新手,或者刚开始熟悉 Git,我强烈建议你了解一下其中的一些命令。虽然市面上有很多优秀的图形界面工具,但没有什么比学习命令行更实用。

git 状态

git status将显示索引与当前 HEAD 提交之间的差异、工作树与索引文件之间存在差异的路径,以及工作树中尚未跟踪的路径。文档

On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   todo.md

你会经常用到这个功能,所以我建议你在~/.bashrc文件中为它创建一个别名:

alias st='git status'

git 添加

git add使用工作树中的当前内容更新索引,为下一次提交准备暂存的内容。它通常会将现有路径的当前内容整体添加进去,但通过一些选项,它也可以仅应用对工作树文件所做的部分更改来添加内容,或者删除工作树中已不存在的路径

当我在一次提交中包含多项更改时,我经常会选择-p只暂存文件的一部分,而不是整个更改集。当我想把工作拆分成多次提交时,这个功能非常有用。

git提交

git commit这将创建一个新的提交,其中包含索引的当前内容以及描述更改的给定日志消息。新提交是 HEAD 的直接子提交,通常是当前分支的顶部,并且分支会更新以指向它。

git commit -m 'Message'

如果你不想打开内置编辑器(对我来说是 Vim),你可以使用-m内联方式输入你的消息。由于我经常使用提交钩子,所以我通常会vim打开编辑器来编辑我的消息。记住……:wqa!

git diff

git diff将显示工作树与索引或树之间的更改、索引与树之间的更改、两棵树之间的更改、合并导致的更改、两个 Blob 对象之间的更改,或磁盘上两个文件之间的更改。文档

我经常使用这个工具来比较不同分支之间的差异。git diff branch1..branch2你还可以将差异输出到文件中git diff > patch.diff。你可以将该文件传递给其他人,稍后使用以下命令应用它git apply patch.diff

git stash

如果你正在处理某些内容,需要暂时保存,可以使用 `.stash` git stash。你可以git stash像使用剪贴板一样使用它,甚至可以用 `.stash` 命名它git stash -m name。之后你可以用 `.stash` 来应用它。如果你没有给暂存区命名,你可以使用`.stash` 或`.dock`git stash apply stash^name来操作暂存区中的内容git stash popgit stash list

git 日志

git log它提供了许多可用于操作当前显示内容的选项。以下是我使用过的一些可能对您有帮助的选项。

  • git log --graph在输出的左侧绘制提交历史的文本图形表示。为了正确绘制图形历史记录,这可能会导致提交记录之间出现额外的行。
  • git log --format=<format>或者git log --pretty=<format>:以指定格式美化打印提交日志的内容,其中可以是 oneline、short、medium、full、fuller、reference、email、raw、format: 和 tformat: 之一。当未指定以上任何一项,且包含 %placeholder 时,其作用如同指定了 --pretty=tformat: 一样。
  • git log -c启用此选项后,合并提交的差异输出将同时显示合并结果与每个父提交之间的差异,而不是逐一显示父提交与结果之间的差异。此外,它仅列出所有父提交中都被修改过的文件。

git push

使用本地引用更新远程引用,同时发送完成给定引用所需的对象

git pull

git fetchGit pull 实际上是Git中两个命令的组合git merge

将远程仓库中的更改合并到当前分支。默认情况下,git pull 是 git fetch 后跟 git merge FETCH_HEAD 的简写形式。

更准确地说,`git pull` 会使用给定的参数运行 `git fetch`,然后调用 `git merge` 将获取到的分支头合并到当前分支。使用 `--rebase` 参数时,它会运行 `git rebase` 而不是 `git merge`。文档

git checkout

切换分支或恢复工作树文件。更新工作树中的文件,使其版本与索引或指定树中的版本一致。如果未指定路径,git checkout 还会更新 HEAD,将指定分支设置为当前分支

git checkout -b <branch>通常情况下,你会想要检出一个新分支。此外,你也可以检出一个现有分支,git checkout <branch>前提是该分支可用且树状图已被获取。

git checkout -f <filename>您可以使用此功能恢复单个文件或一组文件的状态;对于未合并的条目,您还可以使用附加选项,例如(--ours--theirs)。

git blame

Git blame 是一个方便的工具,用于确定文件中每一行代码对应的版本和作者。许多编辑器都有相应的插件,可以直接在编辑器中显示这些信息

虽然有很多选择,但我最常用的是git blame <file>Vim 或 VS Code 中内置的 git blame 命令,但说实话,它们更适合快速导航。

Git blame 可以帮助查找代码移动到了哪里、它是如何移动到那里的,以及它发生在哪些具体的变更集中。

🎉 奖励:git reset

Git reset 有三种主要方式来重置工作树的状态。它以标志--soft --hard--mixed.doc的形式出现

  • --soft完全不会修改索引文件或工作树(但会像所有模式一样将头指针重置为 0)。这样,所有已更改的文件都会显示为“待提交的更改”,正如 `git status` 命令的输出所示。
  • --hard重置索引和工作树。此后对工作树中已跟踪文件所做的任何更改都将被丢弃。
  • --mixed重置索引但不重置工作树(即,已更改的文件会被保留,但不会标记为提交),并报告哪些内容尚未更新。这是默认操作。

通常情况下,如果我在上次提交中犯了错误,并且我想在推送到远程之前撤销该更改,我会按如下方式重新提交。

git reset --soft HEAD^这将取消暂存我上次的提交,并将其保留在工作更改中。我将进行更改并重新提交。如果您不想使用此方法,而只是想在现有提交的基础上进行更改,则可以使用 `add_on git commit --amend...

🎉 额外奖励++:git bisect

如果您在确定错误提交时间方面遇到困难,并且不知道导致该错误的确切提交,请查看git bisect

此命令使用二分查找算法来查找项目历史记录中引入 bug 的提交。使用时,首先指定一个已知包含 bug 的“坏”提交和一个已知在 bug 引入之前存在的“好”提交。然后,`git bisect` 会在这两个端点之间选择一个提交,并询问该提交是“好”还是“坏”。它会不断缩小范围,直到找到引入变更的确切提交

您可以通过运行一系列命令来实现这一点:

  • git bisect start
  • git bisect bad HEAD(如果当前 HEAD 版本存在该错误)
  • git bisect good v1.0(在一切都很美好的时候)
  • git bisect reset(暂停当前的二分查找会话)

你也可以用简写来表示前 3 个命令git bisect start HEAD HEAD~10(因为 bug 可能出现在最近的 10 次提交中)。

🎉🎉🎉 专家级:git rebase

使用此命令时务必谨慎,但如果您确实需要调整提交历史记录,请查看 `git commit-history` git rebase。我通常git rebase在需要清理分支中的提交历史记录,以便合并之前使用过它。如果您最终得到许多类似这样的提交记录,它会非常有用:


47d07f83 Lint
953b4fcb Fix tests
36da7d28 Lint error
2d85a6ab Fix background colors in tmux to match nova
0227a7f5 Fix window/tab navigation in tmux

想删除最后 3 个提交,但需要移除/合并/压缩/重新排序?使用 ` git rebase -i HEAD~5where` 命令-i可以查看版本历史记录,并且HEAD~5大约位于树状结构 HEAD 位置的 5 个提交之后。这将打开一个编辑器,让你修改这些提交。你甚至可以在此模式下对现有提交进行额外编辑,并使用 `amend` 命令进行修改git commit --amend。完成之后,使用 `.` 命令git rebase --continue

附注:这种方法很容易搞乱提交历史,所以我建议只在管理分支提交时使用此命令。如果您修改了提交历史,并且其中包含了已合并的提交,那么父分支树可能会失去同步,而这会带来您不想遇到的麻烦。请务必确保您清楚自己在做什么 :)

结论

就是这样!本来应该是 10 个,但我为了保险起见又加了 3 个。Git 有很多很棒的命令,如果你使用GitHub ,还可以利用hub获得更多命令。Hub 会添加一些可以直接与 GitHub 交互的命令,例如浏览 issue、创建 gist、创建仓库或生成 pull request。务必查看git-scm上的更多文档和实用命令。

祝你好运!


说到每个人都应该知道的事情,不妨看看我写的其他关于系统诊断和系统管理的文章。

如果你喜欢这篇文章,记得关注我并点赞哦!也欢迎关注我的推特GitHub

文章来源:https://dev.to/nyxtom/top-10-git-commands-everyone-should-know-57e0