使用 Git 别名更快地工作 Git Aliases

2025-06-10

使用 Git 别名更快地工作

Git 别名

我刚开始编程的时候,还没有 Git。
我尝试用Visual Sourcesafe做过几次小项目,唯一让我印象深刻的就是数据库经常崩溃。

Visual Sourcesafe 用户界面

如果您对 VSS 的历史及其问题感兴趣,请查看这篇文章或此处的文章

我刚开始第一份工作时,我所在的团队正在使用公司内部的源代码控制系统(我试图回忆它的名字,但记不起来了——等我记起来了会更新帖子。更新:名字是Source Depot)。不久之后,我们将源代码迁移到了使用Team Foundation版本控制的TFS( Team Foundation Server )。

Team Foundation Server 用户界面

后来,我们最终转向了 Git。在我职业生涯的初期,我大量使用 Visual Studio,所有源代码控制命令都可以在用户界面上使用(也可以在控制台上使用,但大部分工作都是在用户界面上完成的)。

我喜欢 TFS 的一个功能是它能够创建搁置集,方便与他人共享。如今 Git 中类似的做法可能是创建分支并推送。开始使用 Git 后,有一段时间我还是会怀念搁置集,但一旦习惯了 Git 处理分支的方式,搁置集就不再需要了。

Git 别名

好了,历史说得够多了,我们来谈谈 Git 别名。我的文件里有很多别名.gitconfig,但我并不经常用到它们。我仍然喜欢使用 GUI(我正在使用Sourcetree,它在 Windows 和 Mac 上都是免费的),尤其是在合并的时候。

这是我的完整.gitconfig 文件的链接- 请注意,其中大部分可能来自我基于点文件的存储库(https://github.com/jfrazelle/mac-dev-setuphttps://github.com/mathiasbynens/dotfiles)。

除了别名之外,我还为 Git 二进制文件设置了别名,因此我不必输入所有三个字母,而只需输入即可g(我知道,这节省了大量时间/类型:))。

我将别名分组如下——请注意,我的配置文件中还有更多别名(与查找内容、比较、合并等相关),但我可能从未使用过它们,所以我没有提到它们。我大部分的搜索和合并操作都是在 GUI 中进行的。

基本别名

这些大多是快捷方式,而不是更复杂的命令。

# View the current working tree status using the short format
s = status -s

# Clone a repository including all submodules
c = clone --recursive

# List all tags
tags = tag -l

# Lists all remote and local branches
branches = branch -a

# List remotes with URLs
remotes = remote -v
Enter fullscreen mode Exit fullscreen mode

下面的命令显示了如何克隆 repo:

g c [repo]
Enter fullscreen mode Exit fullscreen mode

使用 fork 进行工作

这是你需要经常做的事情。我有两个不同的别名来执行此操作 - 一个将上游主分支合并到本地(原点)分支 ( fu),另一个使分支与上游主分支合并,并丢弃所有本地更改 ( fuf)。

# Merges upstream master into local (origin) fork
fu = !"git fetch upstream; git checkout master; git merge upstream/master"

# Makes the fork even with the upstream master, discarding all local changes
fuf = !"git fetch upstream; git checkout master; git reset --hard upstream/master; git push origin master --force"
Enter fullscreen mode Exit fullscreen mode

分支

我使用名为 的别名go来切换到现有分支,或者在分支不存在的情况下创建一个新分支。这是我经常使用的命令之一:

# Switch to a branch, creating it if necessary
go = "!f() { git checkout -b \"$1\" 2> /dev/null || git checkout \"$1\"; }; f"

# Remove branches that have already been merged with master a.k.a. ‘delete merged’
dm = "!git branch --merged | grep -v '\\*' | xargs -n 1 git branch -d"
Enter fullscreen mode Exit fullscreen mode

提交

如果我想将当前更改添加到最新提交(而不是创建新提交),我会使用 Amend 别名:

# Amend the currently staged files to the latest commit
amend = commit --amend --reuse-message=HEAD
Enter fullscreen mode Exit fullscreen mode

您是否有经常使用的 Git 别名?

更新:我们使用的内部源代码控制称为 Source Depot(在这里找到一篇关于它的文章)

鏂囩珷鏉ユ簮锛�https://dev.to/peterj/work-faster-with-git-aliases-3791
PREV
CSS 伪元素的工作原理,对初学者来说非常简单的解释
NEXT
您应该使用什么块大小和块重叠?