安装git
网址https://git-scm.com/downloads上安装
安装之后要设置自身全局配置
1 | git config --global user.name "Your Name" |
创建版本库
初始化一个git仓库
1 | git init |
添加文件到git仓库
1 | git add <file> |
分支管理
本地
commit
1 | git commit 命令会在本地新生成一个节点 |
branch
分支相当于节点指针
1 | 生成新分支 |
merge
1 | 合并其他分支 |
rebase
1 | 变基到其他分支上完成合并 |
checkout
checkout可以让你的工作区在各个结点之间自由移动
1 | 使用哈希值 |
提交
1 | git commit -m "message" |
可以将上边的添加和提交和在一个命令中
1 | git commit -a -m "message" |
修改最近一次提交
1 | git commit --amend |
时光穿梭
版本回退
查看工作区状态
1 | git status |
查看修改的内容
1 | git diff |
查看提交历史,可以得知提交ID,即commit_id
1 | git log |
reset
HEAD指向的是当前的版本,使用命令指向历史的版本
1 | git reset --hard commit_id |
reset命令中有三个参数
- soft:软回退表示将本地版本库的头指针重置到指定的版本,且这次提交后的所有变更移动到暂存区
- 默认mixed:将本地版本库的头指针重置到指定的版本,且重置暂存区,所有变更移动到工作区
- hard:将本地版本库的头指针重置到指定的版本,重置暂存区和工作区
此外:git reset HEAD filename 回退文件,将文件从暂存区回退到工作区,不能使用参数
reflog
重返未来则用命令
1 | git reflog |
Git stash用法
Git stash用于将未提交的修改保存起来,用于后续恢复当前工作目录
1 | git stash save "stash_name" |
工作区和暂存区
工作区git add到暂存区,然后git commit到本地仓库
管理修改
只有git add之后才能git commit到本地仓库
查看工作区和版本库里最新版本的区别:
1 | git diff HEAD --<file> |
撤销修改
场景1:当改乱工作区的文件内容后,要丢弃修改
1 | git checkout --file |
场景2:如果已经添加到了暂存区要丢弃修改,先:
1 | git reset HEAD <file> |
在按场景1操作。
场景3:提交到了版本库,参考版本回退
删除文件
先rm file删除工作区文件,在使用命令删除本地仓库文件
1 | git rm file |
如果删错了,版本库中还有,可以一键还原
1 | git checkout -- file |
git checkout其实是用版本库里的版本替代工作区的版本,无论修改还是删除都可以一键还原
远程仓库
添加远程库
首先创建ssh key
1 | ssh-keygen -t rsa -C "youremail@example" |
在用户主目录里找到.ssh目录,id_rsa.pub是公钥,将里边的ssh复制,在GitHub上打开Account settings的“SSH Key“页面
然后将本地库和远程库关联
1 | git remote add origin git@server-name:path/repo-name.git |
上述命令中origin是指定的远程库名称
然后是将本地库的代码推送到远程库
1 | git push -u origin master |
第一次要有-u,上述的master为分支的名称,首次会发生警告
查看远程库信息
1 | git remote |
从远端库克隆
与远程库建立关联后可以直接git clone
1 | git clone git@server-name:path/repo-name.git |
也可以使用https协议
如果要克隆gitlab中的项目,要输入username和password登录,GIT_TERMINAL_PROMPT控制是否会出现登录界面
分支管理
Feature分支
切回dev分支
1 | git switch dev |
强行删除分支:
1 | git branch -D feature-vulcan |
多人协作
查看远程库信息
1 | git remote |
推送分支
1 | git push <远程主机名> <本地分支名>:<远程分支名> |
抓取分支
1 | git clone [email protected]:username/reporstoryname.git |
注意clone的时候只能clone到main这一个分支
clone其他分支时
1 | git checkout -b dev origin/dev |
当与他人的合并产生冲突时先git pull
1 | git pull <远程主机名> <远程分支名>:<本地分支名> |
解决冲突后再推送
如果git pull还是失败,那么因为本地dev和远程的origin/dev未建立链接,应设置链接
1 | git branch --set-upstream-to=origin/dev dev |
rebase操作可以把本地未push的分叉提交历史整理成直线
标签管理
创建标签
切换到本分支
1 | git tag v1.0 |
git tag 可以查看到所有标签
如果要打历史的标签可以先查找历史版本
1 | git log --pretty=oneline --abbrev-commit |
上边–pretty=oneline表示每个版本一行输出;–abbrev-commit表示提交号只显示前几位,找到对应的commit id
1 | git tag v0.9 f52c633 |
若要查看标签信息
1 | git show v0.9 |
还可以给标签添加信息说明
1 | git tag -a v0.1 -m "version 0.1 released" 1094adb |
操作标签
删除标签
1 | git tag -d v1.0 |
将标签推送到远程库
1 | git push origin v1.0 |
删除远程库的标签
1 | git tag -d v0.9 |