文章目录
简介
Git是用C开发的分布式的版本控制系统。
工作区:本地的文件目录,你直接操作的地方
stage:暂存区,git add
之后修改会添加到此处
master:是一个当前的分支,git commit
会把暂存区的修改提交到当前分支
HEAD:表示当前版本
Git 命令
创建仓库
git init
添加到暂存区
- 添加单个文件
git add <file>
- 添加当前文件夹所有文件
git add .
提交到当前分支
git commit -m "what you have updated"
查看当前分支与工作区文件的区别
git diff <filename>
回退到当前分支中的上一个版本
git reset --hard HEAD^
前n个版本
git reset --hard HEAD~n
回到指定版本
获取commit Id
git reflog
git reset --hard <id>
撤销修改
-
已修改,未提交到暂存区
git restore <file>
-
已提交到暂存区,未提交到当前分支
git restore --staged <file>
git reset HEAD <file>
-
提交到当前分支,未提交到远端仓库
回退到上一个版本
删除文件
-
误删
git restore <file>
-
确实要删除
git rm <file>
添加远程仓库
要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git
关联后,第一次推送master分支的所有内容;
git push -u origin master
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
克隆仓库
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。
Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。
分支
- 查看分支:
git branch
- 创建分支:
git branch <name>
- 切换分支:
git switch <name>
- 创建加切换
git switch -c <name>
- 合并某分支到当前分支:
git merge <name>
普通合并:会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m <message> <name>
- 删除分支:
git branch -d <name>
Bug管理
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
feature管理
- 增加一个新功能,最好新建一个分支进行开发。
- 如果要丢弃一个没有被合并过的分支,可以通过
git branch -D <name>
强行删除。
多人开发
- 克隆同一个远程仓库
- 查看远程库信息,使用
git remote -v
; - 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用
git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交; - 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致; - 建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
; - 从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突。
rebase(变基)
- rebase操作可以把本地未push的分叉提交历史整理成直线;
- rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
tag标签
标签的意义:方便后期回溯
- 命令
git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id; - 命令
git tag -a <tagname> -m "blablabla..."
可以指定标签信息; - 命令
git tag
可以查看所有标签。 - 命令
git push origin <tagname>
可以推送一个本地标签; - 命令
git push origin --tags
可以推送全部未推送过的本地标签; - 命令
git tag -d <tagname>
可以删除一个本地标签; - 命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。
参考
https://www.liaoxuefeng.com/wiki/896043488029600