#90DaysOfDevOps - 了解 Git - 第三十七天
了解 Git
很抱歉使用了双关的标题(Gitting to know Git)。但我肯定不是第一个开这个玩笑的人!
在第三十五天的分享中,我们对版本控制、git的基本工作流有了一定了解。然后第三十六天,我们在电脑上安装了git,进行了更新和配置。同时也进一步学习了客户端服务器和Git的分布式版本控制。
现在我们要去学习一些常用的git命令及其案例。
在哪里查看git的帮助
有时候,你可能不记得或者不知道该使用哪个git命令。这就需要寻找帮助(help)。
在查找帮助的第一时间,你可能会使用搜索引擎,百度一下。
第二步会是查看git上的官方内容和文档。这里(git-scm.com/docs)你不仅可以找到所有命令的可靠资料,还可以找到很多不同的资源。
在离线环境下,我们也可以通过终端(terminal)来查看相同的文档。如果我们想使用git add
命令,我们可以运行git add --help
,这里会看到下面的说明内容。
我们也可以在shell中用git add -h
来查看简短的选项描述。
Git的错误认知
"Git has no access control" - 你可以授权一个领导者来维护源代码。
"Git is too heavy" - Git可以提供浅层存储库(shallow repositories),这在项目很大的时候,减少了历史记录的数量。
存在的缺点
对于二进制文件的处理并不完美。例如,Git适用于源代码,但不太适合可执行文件或视频文件。
Git对用户不是很友好,我们也花了一些时间来讨论其中的命令和功能,这也是它的一个关键标志。
总的来说,git有学习难度,但它很好用。
Git的生态
我想简单聊一下围绕git的生态系统,个人觉得有必要从宏观角度去了解这些。
几乎所有现代开发工具支持Git。
- 开发者工具 - 我们之前有提到过visual studio code,你发现git的插件被集成到了如sublime text和其他文本编辑器和IDE中。
- 团队工具 - 用来做持续集成/持续部署的Jenkins,信息传递框架的Slack和用于项目管理和问题追踪的Jira。
- 云供应商 - 所有大型云供应商都支持Git。 (Microsoft Azure, Amazon AWS, Google Cloud Platform)
- 基于Git的服务 - 有GitHub、GitLab和 BitBucket,后续会进一步讨论。我听说这些服务是代码的社交平台!
Git备忘录
我们没有列出绝大部分的命令,但查看了网上的一些备忘录后,我想记录一些git的命令及其用途。你不需要把它们全部记下来,只需多使用,你会学到它的基本用法。
我是从atlassian那里找到的,把它们整理下来也是了解Git命令的一种好方法。
Git基本操作
命令 | 例子 | 描述 |
---|---|---|
git init | git init <directory> |
在指定的文件夹<directory> 里创建一个空的Git仓库。 |
git clone | git clone <repo> |
将<repo> 中的仓库复制到自己的电脑上。 |
git config | git config user.name |
定义在当前仓库中所有提交的作者名,system 、global 、local 来进行设定。 |
git add | git add <directory> |
将add <files> 和<.> 来进行操作。 |
git commit -m | git commit -m "<message>" |
提交暂存的快照,使用 |
git status | git status |
列出已暂存、未暂存和未追踪的文件。 |
git log | git log |
使用默认格式显示所有的提交记录。 |
git diff | git diff |
显示索引和工作目录中未暂存的更改。 |
Git的撤销更改
命令 | 例子 | 描述 |
---|---|---|
git revert | git revert <commit> |
新建一个提交,撤销 |
git reset | git reset <file> |
将 |
git clean | git clean -n |
显示哪些文件没有被暂存并将被删除。用-f 可以强制执行删除清理。 |
Git重写历史记录
命令 | 例子 | 描述 |
---|---|---|
git commit | git commit --amend |
用暂存的变更替换掉上次的提交,合并上次的提交。当没有暂存时,编辑上次提交的信息。 |
git rebase | git rebase <base> |
从当前分支嫁接到 |
git reflog | git reflog |
显示本地仓库HEAD的变更记录。添加 --relative-date 来显示日期时间信息,或 --all 来显示所有信息。 |
Git的分支
命令 | 例子 | 描述 |
---|---|---|
git branch | git branch |
显示仓库中所有的分支。添加 |
git checkout | git checkout -b <branch> |
新建并检查一个叫 |
git merge | git merge <branch> |
将 |
Git的远程仓库
命令 | 例子 | 描述 |
---|---|---|
git remote add | git remote add <name> <url> |
新建连接一个远程仓库。添加后,你可以使用 |
git fetch | git fetch <remote> <branch> |
从仓库中抓取特定的 |
git pull | git pull <remote> |
抓取当前分支的特定 |
git push | git push <remote> <branch> |
将当前分支中的提交推送到 |
Git的差异比较
命令 | 例子 | 描述 |
---|---|---|
git diff HEAD | git diff HEAD |
显示当前目录与上次提交不同的部分。 |
git diff --cached | git diff --cached |
显示暂存的变更与上次提交不同的部分。 |
Git的配置
命令 | 例子 | 描述 |
---|---|---|
git config --global user.name |
git config --global user.name <name> |
设置当前用户每次提交时使用的作者名称。 |
git config --global user.email |
git config --global user.email <email> |
设置当前用户每次提交时使用的作者邮箱。 |
git config --global alias |
git config --global alias <alias-name> <git-command> |
新建git命令的缩写。 |
git config --system core.editor |
git config --system core.editor <editor> |
设置每个用户预设的文本编辑器。 |
git config --global --edit | git config --global --edit |
用文本编辑器打开全局配置文件,并进行编辑。 |
Git的嫁接(rebase)
命令 | 例子 | 描述 |
---|---|---|
git rebase -i |
git rebase -i <base> |
将当前分支嫁接到 |
Git Pull
命令 | 例子 | 描述 |
---|---|---|
git pull --rebase |
git pull --rebase <remote> |
将远程仓库的内容抓取到文件夹中。使用--rebase 来避免合并分支。 |
Git的重置
命令 | 例子 | 描述 |
---|---|---|
git reset | git reset |
重置暂存的内容,但不改变当前文件夹。 |
git reset --hard | git reset --hard |
重置暂存的内容和文件夹,匹配最近的提交,并改写所有变更。 |
git reset |
git reset <commit> |
重置当前分支到 |
git reset --hard |
git reset --hard <commit> |
与上一条类似,但重置暂存内容和文件夹。删除未提交的变更和所有在 |
Git Push
命令 | 例子 | 描述 |
---|---|---|
git push |
git push <remote> --force |
强制进行推送。不要使用--force ,除非你明确清楚自己在做什么。 |
git push |
git push <remote> --all |
推送当前分支的所有内容到特定远程仓库。 |
git push |
git push <remote> --tags |
当你推送一个分支或使用--flag 时,Tags不会被自动推送。添加--tags 后才推送所有tags到远程仓库。 |