Git是一个版本控制工具,本文者将从使用的角度出发,介绍最常见的基本用法,一篇blog即可快速上手。
本文以64位windows系统为例。
个人开发熟悉基础用法即可,进阶用法针对项目团队进行。
基础用法
安装 Git
- 下载Git,进入下载地址点击
clip here to download即可。(若下载速度慢可考虑科学上网) - 安装,日常使用一路 next 即可,若有其他要求参考其他 blog
- 安装后可以在开始菜单中看到Git的三个启动图标(Git Bash、Git CMD(Deprecated)、Git GUI),至此,安装完毕
安装完毕后,要做的第一件事就是设置你的用户名和邮件地址,因为每次 Git 提交需要这些信息。步骤如下:
- 打开 Git Bash
- 配置全局的用户名及邮箱,
--global标签意味着接下来的所有操作都默认使用此用户信息$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com
新建仓库
仓库是存放代码文件的地方。
在 Git Bash 中
- 创建仓库所在文件夹,并跳转至对应路径
cd /d/_data/Git_files/test - 使用
git init新建仓库,此时文件夹内会有个.git的隐藏文件夹,这里会记录用户所有的变更信息 - 复制代码文件到仓库内,使用
git status查看仓库状态信息注意到文件夹颜色是红色的,代表仓库内容有更改,且还未提交。
在 git 中,文件有 4 种状态。
- Modified 状态:红色,代表文件已更改且未加入“暂存区”
- Staged 状态:绿色,代表文件已加入“暂存区”
这里的概念及流程图不懂没关系,只要懂如何提交和回退就行了,提交和回退的方法见下文。
提交
要提交更改有两个步骤:
-
使用
git add <filename>将文件加入暂存区(使用git add .可一次性将仓库内所有文件加入),此时再次使用git status查看信息,发现文件夹变绿。 -
接下来再提交这次变更,执行
git commit -m <message>提交,-m代表附带<message>信息,用于附带本次提交的备注信息,如git commit -m "my first commit"。当代码文件变更时(使用
git status发现文件名变红),需要再次执行“步骤4”提交变更。注意:
git commit只会提交那些加入到暂存区的文件(git status中为绿色的文件),若在提交前想反悔,执行git reset <filename>将文件退出暂存区状态(git status变红)。 -
可以通过
git log查看提交日志,红框为每次提交的 commitID,该值唯一。
回退
若对新版本不满意,想回到旧版本,可通过 git reset <commitID> [--参数] 实现版本回退。
参数有三种,不带参数默认为 --mixed:
--hard:不保存所有更改--soft:保留变更且变更内容处于 Staged,红色--mixed:保留变更且变更内容处于 Modified,绿色
使用 git reflog 查看所有提交过的版本。
注意:这里的 commitID 是 7 位的,与
git log中的不同,实际上也只需要取前7位就能唯一确定ID值。
若想回到任意版本,使用 git reset <commitID> 即可。
若想回到最新版本,可以直接使用 git pull。
进阶用法
配置命令别名
使用 alias 可以自定义命令,简化命令。
编辑仓库内 .git 隐藏文件夹中的 config 文件,添加 alias 别名如图即可使用。
如图,后续执行 git ad 命令相当于执行 git add .。
常用别名设置(来源于网络)
分支
使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。开发项目时,一般一个人负责一个分支。
分支相当于两条并行的路线,两者相互独立、方向不同,一条路上的改动不会影响另一条,如图所示。
通过 git checkout -b <name> <template> 创建新的分支,参数 <name> 是新分支的名字,参数 <template> 是指定以哪个现有分支或者 commit 为模板,缺省(默认)以当前分支为模板。
以哪个分支为模板,就会继承该分支的一切,包括之前的所有提交的记录,相当于拷贝了一个副本,但之后在副本这个分支上的所有修改与原有分支无关。
使用 git checkout <name> 切换到名为 <name> 的分支。
通过 git branch 查看所有分支,带 * 号且高亮的是当前所在分支。
以后若想回到某个版本,可以直接切换分支,而不需要查找 commitID ,更为方便。
合并
可以将其他分支上的改动合并到本分支,如图所示。
注意只是合并分支的变更,而不是内容!合并不改变其他分支的内容。
使用 git merge <branchName> 将分支"branchName" 的 commit 记录合并到当前分支。
远程仓库
使用 git clone [url] 将远程仓库文件夹下载至本地, [url] 是你要拷贝的项目,以github为例,如图。
而本地 Git 仓库与 GitHub 仓库间的传输是通过 SSH 加密的,因此在上传代码到 github 前需要先设置一下:
- 创建 SSH KEY
【window环境】先看下本地电脑 C 盘的用户目录,如
C:\Users\“用户名”中有没有.ssh文件夹,以及该文件夹内是否有id_rsa和id_rsa.pub这两个文件。若无,则在 bash 中输入命令ssh-keygen -t rsa -C "youremail@example.com"并一路回车,用于生成KEY文件。
【Linux环境】使用命令ssh-keygen -t rsa -C "邮箱",一路回车生成。然后进入个人目录cd /home/usr/.ssh,注意这里的"usr"需改为你的用户名,使用cat id_rsa.pub即可查看密钥。
-
将文件
id_rsa.pub的文件内容添加到个人设置中,具体操作如图 -
在 github 上创建一个 Git 仓库,如图。
-
复制仓库地址,使用
git remote add origin <仓库地址>添加该远程仓库并命名为 orgin。 -
关联好后通过命令
git push -u origin master将本地 master 分支的内容推送到远程仓库 origin。
注意:因为是第一次推送,所以要加上
-u选项,后续推送时执行git push origin master即可。
如果想要删除某个远程主机,使用 git remote rm <主机名> 即可删除。
git push <远程主机名> <本地分支名>:<远程分支名> 命令用于从将本地的分支版本上传到远程并合并。
若使用 git push 提交时提示没有上流分支,需执行 git push --set-upstream origin bc-a 将远程仓库的bc-a分支作为本地bc-a的上流分支,之后再使用 git push 可以直接将本地分支推送至远程仓库的上流分支了。
使用 git fetch [clias] 拉取远程仓库信息,告诉git去获取它有你没有的数据。
git merge [alias]/[branch] 将服务器上的任何共性合并到你当前的分支。
在本地创建分支时,若想以远程仓库里的分支为模板,则命令应改为 git checkout -b <分支名> origin <远程分支名>
git pull,等同于先 fetch 再自动 merge
rebase
rebase 变基,即在基础分支被更改的情况下,将当前分支的所有更改附加到新的基础分支上,但不改变基础分支,相当于更新当前分支的基础分支。
使用 git rebase <分支名> 把当前分支的后续修改依次应用于master分支。
使用 git rebase --continue 继续下一个结点。
Reference
超详细Git 安装教程(Windows)__阿衡_的博客-CSDN博客_安装git
Git - 初次运行 Git 前的配置 (git-scm.com)
git merge 和git rebase的区别 - 简书 (jianshu.com)