Git 安装
MacOS 系统安装 Git
安装 Xcode,在菜单栏中选择Xcode > Preferences > Locations,或者直接快捷键command + ,,选择Command Line Tools,点Install就可以完成安装了
Windows 系统安装 Git
-
从 Git官网 下载安装程序,然后按默认选项安装即可
-
安装完成后,在开始菜单里找到
Git>Git Bash,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
配置当前机器的标识
git config --global user.name "<Your Name>"
git config --global user.email "<Your E-mail>"
Git 安装完成后还需最后一步配置,这样配置是由于 Git 是分布式版本控制系统,所以每台机器需要用户名和邮箱作为一个标识
原理 / 流程
Git 包含有四个区
- 工作区(Workspace)
- 暂存区(Index / Stage)
- 本地仓库(Repository)
- 远程仓库(Remote)
Git 流程图
graph LR;
Workspace(工作区)
Index(暂存区)
Repository(本地仓库)
Remote(远程仓库)
Workspace-->|add|Index-->|commit|Repository
Repository-->|push|Remote
Repository-->|checkout|Workspace
Remote-->|fetch/clone|Repository
Remote-->|pull/clone|Workspace
版本库
版本库可以理解为是一个目录,该目录里的所有的文件都可以被 Git 管理起来,每个文件的修改、删除,Git都能追踪,以便任何时刻都能追踪历史的版本
基础操作
创建版本库
即把当前目录变成 Git 可以管理的仓库,使用命令:
git init
将文件提交至暂存区
将文件 file 从工作区添加到暂存区,如果要添加当前目录下的所有文件,可用"."表示所有文件:
git add <file> / git add .
将文件提交至本地仓库
将暂存区的文件全部提交至本地仓库,提交后暂存区就没有任何文件了:
git commit -m "<注释信息>"
查看仓库的状态
比如和最近一次 commit 相比,工作区文件是否有修改:
git status
查看具体修改内容
git diff
如果暂存区为空,git diff比较工作区和最近一次 commit 的代码的具体差异;
如果暂存区不为空,git diff比较工作区和暂存区的具体差异
版本回退
HEAD指向提交区里的最新的版本,HEAD^指向上一版本,HEAD^^指向上两版本,HEAD~n指向上n个版本,这些指针都是可以当作提交ID使用
回退
将工作区的文件回退到提交ID对应的状态,并把提交区的HEAD指针指向对应的节点
git reset --hard <提交ID>
查看提交日志
git log
查看所有操作记录
git reflog
分支管理
查看分支
不加参数的话默认显示本地分支,加上参数-r的话,显示的是远程仓库的分支:
git branch [-r]
创建分支
创建分支branch:
git branch <branch>
切换分支
切换到分支branch,如果加上参数-c的话,表示创建分支branch并切换到该分支:
git switch [-c] <branch>
合并分支
将分支branch合并到当前分支:
git merge <branch>
删除分支
如果分支branch有被 push 到远程仓库或者 merge 到 HEAD,使用-d参数可以直接删除该分支,如果没有则会删除失败,这时可以使用参数-D强制删除:
git branch -d/-D <branch>
远程仓库
给远程仓库取别名
在本地保存远程仓库的地址 url,并取名为origin:
git remote add <origin> <远程仓库地址url>
显示远程仓库
显示所有远程仓库名称,以及其地址 url:
git remote -v
远程仓库删除&改名
git remote rm <origin> # 删除远程仓库 origin
git remote rename <old_name> <new_name> # 修改仓库 old_name 为 new_name
push
将本地仓库当前分支的内容推送到到远程仓库origin的branch分支中,如果加上参数-u,可以使本地的当前分支追踪远程仓库的branch分支,以后只需git push命令即可推送:
git push [-u] <origin> <branch>
pull / fetch
pull将远程仓库origin的branch分支拉取到本地仓库的当前分支
git pull <origin> <branch>
fetch则是将文件从远程仓库拉取到本地仓库,但是不更工作区的代码
git fetch
追踪远程仓库
每次 push 和 pull 都输入远程仓库的分支名非常麻烦且没必要,因此可以使得本地当前分支追踪远程仓库originのbranch分支,使得每次 push、pull 操作都有默认的远程分支:
git branch -u <origin>/<branch>
查看追踪关系
查看本地分支与远程分支的追踪关系:
git branch -vv
创建已追踪的本地分支
在本地创建与远程分支branch同名的分支,并使本地分支branch追踪远程仓库分支branch:
git checkout --track <origin>/<branch>
创建本地分支mybranch,并使本地分支mybranch追踪远程仓库originのbranch分支:
git checkout -b <mybranch> <origin>/<branch>
从远程仓库克隆
git clone <远程仓库地址url>
git clone相当于三个操作:
git init
git remote add origin <远程仓库地址url>
git fetch
git checkout --track origin/master
Tips
想将远程仓库回退至上一提交版本
先把本地的分支和工作区回退到上一次提交的版本
git reset --hard HEAD^
使用git push要将本地分支推上远程分支时会发现推不了,提示让你git pull,但是git pull的话就又回到最新版本了,相当于没回退
可使用强制推的方式将代码推上远程仓库
git push -f