简介
- 定义
Git,最先进的分布式版本控制系统之一,最初是由Linux之父Linus为了更好管理开源Linux系统而开发的一个软件; - 下载:https://npm.taobao.org/mirrors/git-for-windows/
- 安装
- Linux:
sudo apt-get install git
- Windows、macOS通过官网下载安装包后进行安装即可;
- 设置
安装完成后,设置署名和邮箱:
$ git config --global user.name "user name"
$ git config --global user.email "example@email.com"
# 可选,让Git命令行显示颜色
$ git config --global color.ui true
版本库创建及管理
- 如何创建版本库
- 先创建一个空文件夹,Windows下不再介绍,Linux以及macOS下可通过
$ mkdir gitlearn
命令创建; - 通过
$ git init
将刚才创建的目录变为可管理的仓库;
- 如何将文件添加到版本库
- 在刚才创建的空文件夹中,添加你自己的文件,以readme.md为例;
- 用
git add
命令将文件添加到仓库;
# 添加单一文件
$ git add readme.md
# 添加所有文件
$ git add .
- 用
git commit
将文件提交到仓库;
$ git commit -m "this is a readme.md file."
- 如何查看仓库修改的内容
- 用
git status
查看仓库当前状态; - 用
git diff filename
查看文件具体修改的内容;
$ git status
$ git diff readme.txt
git log
查看最近到最远的提交日志
$ git log --pretty=oneline
- 回退之前的版本,先用
git log
查看提交历史,以确定commit_id,回退后,当想要重返未来版本时,用git reflog
查看命令历史,从而确定重返版本commit_id,HEAD
指向当前版本,为了在版本的历史之间穿梭,使用命令git resrt --hard commit_id
$ git reset --hard HEAD^
- 直接丢弃工作区的某文件修改内容时,使用命令
git checkout -- filename
$ git checkout -- readme.md
- 删除文件,先在工作区将文件删除后,然后使用命令
git rm
将版本库中文件删除,然后通过git commit
提交
$ git rm readme.md
$ git commit -m "delete readme.md"
远程仓库
- 本地Git和远程Github相连接,可以进行如下操作:
- 确定
.ssh
目录下是否存在文件id_rsa
和id_rsa.pub
,有则复制id_rsa.pub
中内容明将其添加到Github中的SSH Key,建立两者联系,可以在本地管理, - 不存在则通过如下命令生成;
$ ssh-keygen -t rsa -C "example@email.com"
- 如何添加远程仓库
- 在本地通过如下命令建立本地仓库与远程仓库进行管理,然后就可以将本地仓库内容推送到Github仓库;
$ git remote add origin git@github.com:cunyu1943/LeetCode.git
- 从远程仓库克隆岛本地:
$ git clone https://github.com/cunyu1943/LeetCode.git
- 将本地仓库内容推送到远程仓库;
# 第一次推送
$ git push -u origin master
# 之后的推送
$ git push origin master
分支管理
- 创建并切换分支
$ git switch -c dev
# 等价命令
$ git checkout -b dev
# 等价命令
$ git branch dev
$ git checkout dev
- 查看当前分支,前边标有代表当前分支,切换回
master
分支;
$ git branch
$ git checkout/switch master
- 将
dev
分支合并到master
分支;
$ git merge dev
- 删除分支;
$ git branch -d dev
- 强制删除未合并分支;
$ git branch -D dev
- 查看分支合并图
$ git log --graph
撤销变更
撤销变更由底层部分(暂存区的独立文件或片段)和上层部分(变更到底是通过哪种方式被撤销的)组成;
git reset
通过将分支记录回退几个提交记录来实现撤销改动,主要用于自己开发的本地分支,即 commit
的内容,对于远程分支是无效的;
# 回退到 HEAD 的父记录
git reset HEAD~1
git revert
当需要撤销变更并 分享 时,即撤销已经 push
的内容,需要使用 git revert
;
# 撤销 HEAD 的提交,相当于新提交一个记录,此记录状态和 HEAD 父记录相同
git revert HEAD
多人协作
- 查看远程库信息:
git remote -v
; - 本地新建分支若不推送到远程,则对其他人不可见;
- 本地推送到远程库,
git push origin branch-name
,若推送失败,则用git pull
抓取远程新提交;
$ git push origin master
# 若推送失败,则先执行如下命令
$ git pull
- 本地创建和远程分支对应分支,
git checkout -b branch-name origin/branch-name
$ git checkout -b dev origin/dev
- 建立本地分支和远程分支的关联,
git branch --set-upstream branch-name origin/branch-name
$ git branch --set-upstream dev origin/dev
- 从远程抓取分支则使用
git pull
,若有冲突,则先解决处理后再处理;
标签管理
- 切换到需要打标签的分支
git switch branch-name
; - 打标签并查看;
# 打一个名为"v1.0"的标签
$ git tag v1.0
# 查看所有标签
$ git tag
- 查看标签信息,
git show <tagname>
;
$ git show v1.0
- 创建带有说明的标签,用
-a
打标签名,-m
指定说明文字;
$ git tag -a v1.0 -m "version 1.0 released"
- 删除标签,本地使用
git tag -d <tagname>
,远程则使用git push origin :refs/tags/<tagname>
# 删除本地标签
$ git tag -d v30.0
# 删除远程标签
$ git push origin :refs/tags/v30.0
- 将标签推送到远程
git push origin <tagname>
# 推送某一标签
$ git push origin v1.0
# 推送所有标签
$ git push origin --tags
建立Github和Gitee共同远程连接
- 删除某一关联的远程库,
git remote rm <basename>
$ git remote rm origin
- 关联Gitee远程库,
git remote add <basename> git@https://gitee.com/<username>/<respName>.git
$ git remote add gitee https://gitee.com/cunyu1943/LeetCode.git
- 关联Github远程库,
git remote add <basename> https://github.com/<username>/<respName>.git
$ git remote add github https://github.com/cunyu1943/LeetCode.git
- 推送到Gitee和Github
# 推送到Gitee
$ git push gitee master
# 推送到Github
$ git push github master
相对引用
通过使用 相对引用,可以从一个易于记忆的地方开始计算;
- 向上移动 1 个提交记录:
^
,将其加到引用名称的后边,表示让 Git 寻找指定提交记录的父记录,如master^
表示master
的父节点; - 向上移动 N 个提交记录:
~N
;
# 切换分支父节点
git checkout newBranch^
# 一次后退多步
git checkout newBranch~4
# 强制将 master 分支指向 HEAD 的第 3 级父提交
git branch -f master HEAD~3
移动提交记录
git cherry-pick
整理提交记录,命令形式如下:
git cherry-pick <提交号>...
# 将 b1、b2、b3 合并到 master
git checkout master
git cherry-pick b1 b2 b3
交互式 rebase
通过使用带参数 --interactive
的 rebase
命令,简写为 -i
,从而打开交互式 rebase
;
当打开交互式 rebase
时,可以进行的操作如下:
- 调整提交记录的顺序(鼠标拖放);
- 删除不想要的提交(通过切换
pick
的状态来完成); - 合并提交(将多个提交记录合并为一个);
其他小技巧
- 忽略特殊文件
此时需要编写.gitignore
文件,文件要放到版本库中,且可以对.gitignore
进行版本管理;
- 配置命令别名
# 举例
$ git config --global alias status st
$ git config --global alias checkout co
$ git config --global alias commit cm