Git快速上手
Git是最流行的开源版本控制系统,大多数项目都用它来追踪文本文件(代码)的变化。而Github是一个国外的基于Git的代码社交平台,可用于分享代码和团队合作。类似产品国内的有Gitee等。
1. 介绍与安装
想必计算机/电子等相关专业的同学或者爱好者都有过从Github下载代码的经历吧。当你想要下载别人代码库中的代码时,使用git clone获取的会比下载zip多一个.git文件,即clone的代码包含版本历史,处于版本管理下,而下载zip方式只会下载当前版本的源代码而不处于版本管理下。因此使用git clone很大的好处是可以方便的通过git pull来更新你本地的代码为远程的最新版本。
如果你还想在别人代码的基础上进行修改和版本控制,最终再发布到类似于Github这样的平台上,那么你需要先点击 fork,然后再使用自己代码仓库的链接 git clone到本地。
要在自己的电脑使用Git,你至少需要点这里完成安装:https://git-scm.com/downloads
安装好后还要配置用户信息,别人可以从你开源的代码中看到这些信息,然后邮件联系你。打开 git bash,
- 对你的commit操作设置关联的用户名:
git config --global user.name "[name]"
- 对你的commit操作设置关联的邮箱地址:
git config --global user.email "[email address]"
- 启用有帮助的彩色命令行输出:
git config --global color.ui auto
- 设置ssh key,
cd ~/.ssh
,ls
,如果路径下有id_rsa文件,说明已经有了ssh key不需要再生成。否则使用命令ssh-keygen -t rsa -C "yourname@163.com"
生成。
2. 基础概念学习
- 游戏版 tutorial:进入这个游戏,通过游戏理解Git保存的是什么,理解分支的含义(右下角的问号标志可以查看答案)
并完成「主要」部分的「基础篇」学习:git commit
、git branch
、git merge
、git rebase
命令
完成「远程」部分的「Push & Pull —— Git 远程仓库!」,包括git clone
、git pull
、git push
命令及模拟练习。
游戏中的其余命令你可能暂时用不到或者我认为它写的不够实用,你可以选择性学习。
3. 常见的使用场景
与人协作的流程:
git checkout -b dev_branch # 创建一个自己的开发分支
git pull origin master # 每天早晨第一件事
# 然后开始工作,每有一小段进展就:
git add .
git commit -m "进展内容"
# 每有一个较大的进展就
git push origin:dev_branch
# 如果出现冲突, 编辑器处理完冲突后
git add .
git rebase --continue
Squash:多个commit合并成一个
# 假设你的分支名是 'feature-branch'
git checkout feature-branch
# 对最近的 3 次提交进行交互式 rebase
git rebase -i HEAD~3
# 修改 commit 列表,将除了第一个 commit 外的其他 commit 的 'pick' 改成 'squash'
# 保存并关闭编辑器
# 修改合并后的 commit message
# 保存并关闭编辑器
# 推送/强制推送到远程
git push origin feature-branch
# git push origin feature-branch --force
在写commit说明时,建议遵循一定的规范,例如 Angular 规范
<type>(<scope>): <subject>
-
type(必需)用于说明 commit 的类别,使用下面7个标识之一。
feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动 -
scope(可选)用于说明 commit 影响的范围,如果你的修改影响了不止一个scope,你可以使用*代替
-
subject(必需)是 commit 目的的简短描述,不超过50个字符。以动词开头,使用第一人称现在时,比如change,而不是changed或changes,第一个字母小写,结尾不加句号
更详细的可以参考segmentfault blog
4. Git常用命令备忘单
git clone <url>
: Clone(下载)一个已存在于 GitHub 上的仓库,包括所有的文件、分支和提交(commits)git add .
: 将所有更改添加到暂存区git commit -m ""
: git commit不加参数回车,会进入一个类似于vim的编辑器,在这里可以写下大段的messagegit init
: 初始化当前文件夹使用git管理git remote
git remote add origin <url>
: 在使用过 git init 命令后,使用该命令将本地仓库与一个 GitHub 上的空仓库连接起来
git remote -v
: 查看链接的远程仓库
git remote rm origin
: 删除某个远程仓库
git remote show origin
: 查看某个远程仓库的分支等详细信息git pull <远程仓库名> <本地分支名>:<远程分支名>
: 拉取远程分支的更新合并到本地。git pull 其实就是 git fetch 和 git merge 的简写,先从远程仓库获取最新的提交记录,然后将这些提交记录合并到你当前的分支中。git push <远程仓库名> <本地分支名>:<远程分支名>
: 推送到远程,常用git push origin master
其中origin为默认的远程仓库名git status
: 查看当前分支、同步分支、显示工作目录和暂存区的当前状态git restore README.md
: add前想恢复文件,即恢复未暂存的更改,到上次commit的状态
git restore --staged README.md
: 恢复已暂存的更改,撤销暂存操作git checkout -b <name>
: 创建新分支并切换到新分支
git checkout <name>
: 切换分支,name可以是分支名,可以是标签名,也可以是提交记录的哈希值git rebase
: 用于个人分支的整理合并,建议不要用于共享分支如mastergit reflog
: 查看历史git reset --hard <分支名>
: 将当前分支回退到某一分支