使用 Git 别名更快地工作
Git 别名
我刚开始编程的时候,还没有 Git。
我尝试用Visual Sourcesafe做过几次小项目,唯一让我印象深刻的就是数据库经常崩溃。
如果您对 VSS 的历史及其问题感兴趣,请查看这篇文章或此处的文章。
我刚开始第一份工作时,我所在的团队正在使用公司内部的源代码控制系统(我试图回忆它的名字,但记不起来了——等我记起来了会更新帖子。更新:名字是Source Depot)。不久之后,我们将源代码迁移到了使用Team Foundation版本控制的TFS( Team Foundation Server )。
后来,我们最终转向了 Git。在我职业生涯的初期,我大量使用 Visual Studio,所有源代码控制命令都可以在用户界面上使用(也可以在控制台上使用,但大部分工作都是在用户界面上完成的)。
我喜欢 TFS 的一个功能是它能够创建搁置集,方便与他人共享。如今 Git 中类似的做法可能是创建分支并推送。开始使用 Git 后,有一段时间我还是会怀念搁置集,但一旦习惯了 Git 处理分支的方式,搁置集就不再需要了。
Git 别名
好了,历史说得够多了,我们来谈谈 Git 别名。我的文件里有很多别名.gitconfig
,但我并不经常用到它们。我仍然喜欢使用 GUI(我正在使用Sourcetree,它在 Windows 和 Mac 上都是免费的),尤其是在合并的时候。
这是我的完整.gitconfig 文件的链接- 请注意,其中大部分可能来自我基于点文件的存储库(https://github.com/jfrazelle/mac-dev-setup和https://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
下面的命令显示了如何克隆 repo:
g c [repo]
使用 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"
分支
我使用名为 的别名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"
提交
如果我想将当前更改添加到最新提交(而不是创建新提交),我会使用 Amend 别名:
# Amend the currently staged files to the latest commit
amend = commit --amend --reuse-message=HEAD
您是否有经常使用的 Git 别名?
更新:我们使用的内部源代码控制称为 Source Depot(在这里找到一篇关于它的文章)
鏂囩珷鏉ユ簮锛�https://dev.to/peterj/work-faster-with-git-aliases-3791