10 Useful Git Tips

在过去的几年里,Git 已经迅速成长为最受欢迎的版本控制系统之一。它被各种语言的开发者和不同规模的团队所使用,从小的开源项目到像 Linux 内核这样的大型代码库。

在这篇文章中,我们将与您分享一些可以改善您的 Git 体验和工作流程的技巧。


git log –no-merges

这个 Git 命令显示整个提交历史,但跳过合并两个分支或解决合并冲突的提交。这使您可以快速查看对项目所做的所有更改,而不会让合并提交混淆 Git 历史。

$git log --no-merges

commit e75fe8bf2c5c46dbd9e1bc20d2f8b2ede81f2d93
Author: John
Date:   Mon Jul 10 18:04:50 2017 +0300

    Add new branch.

commit 080dfd342ab0dbdf69858e3b01e18584d4eade34
Author: John
Date:   Mon Jul 11 15:40:56 2017 +0300

    Added index.php.

commit 2965803c0deeac1f2427ec2f5394493ed4211655
Author: John
Date:   Mon Jul 13 12:14:50 2017 +0300

    Added css files.


git revert –no-commit [commit]

Git revert 生成一个新提交,撤销现有提交所做的更改,并生成一个包含结果内容的新提交。如果您想撤销命名的提交并避免自动提交,可以使用 –no-commit 或简写 -n 标志。


git diff -w

Git diff 显示两个提交、两个工作树或两个磁盘上的文件之间的更改。当多个人在同一项目上工作时,通常会出现由于文本编辑器的制表符和空格设置引起的更改。为了在比较行时忽略由空格引起的差异,您可以使用 -w 标志。


git diff –stat

显示每个文件随时间的变化。您可以添加 3 个参数:width 来覆盖默认输出宽度,name-width 来设置文件名的宽度,count 来限制输出到前几行。

$ git diff --stat
 index.php | 83 +++++++++++++++++++++++++++++---------------------------
 1 file changed, 43 insertions(+), 40 deletions(-)
$ git diff --stat-width=10
 index.php | 83 +++---
 1 file changed, 43 insertions(+), 40 deletions(-)


git reset –soft HEAD^

将 HEAD 重置到某个特定的提交,而不触及索引文件和工作树。在此提交之后所做的所有更改都被移动到"已准备好提交"的阶段。之后,您只需运行 git commit 即可将它们重新添加。


git stash branch [branch-name [stash]]

此命令创建一个名为 branch-name 的新分支并检出它,然后将给定的 stash 中的更改应用到它,并丢弃 stash。如果没有给定 stash,它将使用最新的一个。这使您可以将任何 stashed 更改应用到一个更安全的环境中,稍后可以将其合并到 master 分支。


git branch -a

它显示所有远程跟踪和本地分支。您可以使用 –merged 标志来查看仅完全合并到 master 分支的分支。这样您可以跟踪您的分支,并找出哪些分支不再使用并可以删除。

$ git branch -a

  dev
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev


git commit –amend

使用 git commit --amend,您可以更改之前的提交,而不是创建一个新的提交。如果您还没有将更改推送到远程分支,您可以使用此命令来修改最近的提交,添加最新的更改,甚至更改您的提交消息。


git pull –rebase

Git pull –rebase 强制 Git 首先拉取更改,然后在远程分支的最新版本上重新基于这些未推送的提交。–rebase 选项可用于确保线性历史,通过防止不必要的合并提交。


git add -p

当您使用此命令时,它不会立即将所有更改添加到索引中,而是逐个检查更改并询问您要如何处理。这样,您可以交互式地选择确切要提交的内容。

diff --git a/package.json b/package.json
index db78332..a814f7e 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,6 @@
   },
   "devDependencies": {
     "bootstrap-sass": "^3.3.7",
-    "gulp": "^3.9.1",
     "jquery": "^3.1.0",
     "laravel-elixir": "^6.0.0-11",
     "laravel-elixir-vue-2": "^0.2.0",
Stage this hunk [y,n,q,a,d,/,e,?]?