因为任职的公司在管理版本时,基本使用 Git 命令行方式,所以把 Git 简单重新整理下。
本文不会长篇大论的讲解 Git,因为在 Git 官网有非常详细的说明。只会基于作为小白式的开始,介绍项目中最常用的一些命令。能够使大家快速地上手使用。
当然除了使用命令行,还有一些 GUI 工具,比如 SourceTree、Github 等。不过在了解 Git 的工作原理后,可以在使用 GUI 时更加游刃有余。
如有错误,欢迎指正。如有建议,欢迎交流。
鉴于全文文章过长时,人的注意力难以集中。这里贴出 Git 介绍和 Git 摘要。
把 “Git 如何使用” 放在了 Notion 原文 里。可能打开较慢,请耐心等待。
什么是 Git
Git 是一个免费开源的分布式版本控制系统。相比于其他的 VCS(Version Control Systems),其特点主要是分布式和强大的分支管理。
如何理解版本控制系统呢?
想必大家在写文档或毕业设计时,出于某种“以前的内容可能会再次用到”的想法,在修改文档时一般会拷贝一份之前的文档,然后再在拷贝的文档上进行删除、修改或其他编辑。然后在经历过多次修改之后,可能出现诸如“xxx初版”、“xxx改版”、“xxx最终版”、“xxx最终不改版”.....。
然后有一天,当你想看下某段文字在编辑之前的内容,结果却不记得是在哪个拷贝文件里。只能一头乱麻的一个个文件的翻看。
如果这时候,有一个系统能够自动帮你记录每次修改的修改记录。在需要时,只需要查看某次改动即可,这样是不是很方便?
Git 就是具有这种功能的系统.
什么是集中式、分布式呢?
集中式版本控制系统(CVCS:Centralized Version Control Systems)是在本地版本控制系统的基础上进一步发展。
集中式是把所有版本文件放在中央服务器的。当工作时,需要从服务器获取最新的版本,然后进行修改。修改之后,再提交到中央服务器。
比如 SVN 就是集中式的。
集中式的相较于本地式的优点是,每个人都在某种程度上知道项目中其他人再做什么。管理员也可以精准地把控。
集中式的缺点是,需要联网才能工作,如果网速不能达到要求,那么整个协同的过程是非常让人不爽的。其次是风险太大,如果服务器出现了故障或者数据丢失,在没有备份的情况下,简直是灾难。
分布式版本控制系统(DVCS:Distributed Version Control Systems)不同于集中式版本控制系统。
分布式是没有“中央服务器”的,每个人电脑上的本地仓库都保存了整个项目的完整备份。
分布式的优点,不需要联网工作,每个人的修改都可以先提交到本地仓库,然后在合适的时机再提交到远程仓库从而推送给其他人看到。不会出现数据丢失的情况。
先丢一份 Git 命令摘要,便于快速查找。 Notion 原文是对 Git 的简单介绍,便于帮助理解。
摘要
说明:以下所有涉及到 <xxx> 都是占位说明符,都可以整体替换对应的内容。比如:
git clone <url>
// 使用时
git clone git@git.com
安装在 macOS
通过安装 Xcode 安装
-
通过 Homebrew 安装
$ brew install git
通过提示安装。比如在终端(Terminal)中输入
git --version
,如果没有安装,则会提示安装。
配置
对所有本地仓库操作设置关联的用户名和邮箱地址:
git config --global user.name <name>
git config --global user.email <email>
创建仓库
创建本地仓库:
git init
将本地仓库与远程库关联:
git remote add origin <url>
克隆远程仓库:
git clone <url>
更改
将文件进行快照:
git add <file>
将所有文件进行快照:
git add .
将快照提交到本地仓库:
git commit -m "Descriptive Message"
在 commit 之前让 Git 自动保存快照(即跳过手动保存至暂存区):
git commit -a -m "Descriptive Message"
-a
会包含所有 Git 跟踪的改动文件,并在 commit 之前自动保存快照。
查看当前分支的版本历史:
git log
查看指定 commit 的数据和内容变化:
git show <commit>
查看仓库状态:
git status
撤销
撤销工作区的修改:
git checkout -- <file>
撤销暂存区的快照,保留改动内容在工作区:
git reset HEAD <file>
撤销指定的 commit 之后所有的提交,但本地保留改动内容:
git reset <commit>
或
git reset --soft <commit>
撤销所有提交到指定的 commit,不会保留之后的记录:
git reset --hard <commit>
请谨慎使用 --hard !
分支
查看所处分支:
git branch
创建新分支:
git branch <branchName>
切换指定分支:
git checkout <branchName>
将分支合并到当前分支:
git merge <branch>
删除指定分支:
git branch -d <branchName>
同步更改
下载远程库跟踪分支的所有历史:
git fetch
将远程跟踪分支合并到当前本地分支:
git merge
获取远程跟踪分支的所有新提交,更新至本地对应分支(是 fetch 和 merge 的结合):
git pull
将本地分支提交到远程仓库:
git push
标签
创建标签:
git tag <name>
查看标签:
git tag
删除标签:
// 删除本地标签
git tag -d <tagname>
// 删除远程库标签
git tag -d <tagname>
git push origin :refs/tags/<tagname>
把标签推送至远程库:
git push origin <tagname>
// 推送本地所有未推送的标签
git push origin --tags
别名
创建别名:
git config --global alias.<short command name> <command name>
删除别名:
git config --global unset alias.<short command name>
最后,命令行也可以与 GUI 配合使用。比如直接把文件拖入 SourceTree,即可在 SourceTree 中进行使用。
Git 怎么用
请移步 Notion 原文。可能打开较慢,客官请耐心等待。