Git 的教程:
一:git的基础操作--提交,发布
创建一个本地版本库: git init
添加一个文件: git add
提交一个文件到本地版本库: git commit -m 描述信息
查看目前文档的状态: git status
在add前查看修改的内容: git diff 文件名
查看提交的日志: git log
查看命令的历史: git reflog
二:git的版本控制
git的当前版本是HEAD,回到前一个版本是: git reset --hard HEAD^
git回到任意版本是: git reset --hard commit——id
放弃未add的版本: git checkout -- file
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
查看远程库的信息: git remote -v
删除: 如果在工作区删除了一个文件
1. 如果你确定要删除,那使用 git rm file 从版本库中删除,并且commit
2. 如果你是误删,则需要从版本库中恢复文件: git checkout -- file
三:连接远程仓库:
1. 生成密钥:ssh-keygen -t rsa -C "[email protected]",在用户目录下可以找到这个文件。
2. 注册github账号,把密钥添加到gitHub
3. 连接远程数据库
1. 未创建本地仓库
echo "# learngit" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/jiangerOne/learngit.git
git push -u origin master
2. 如果已经创建本地仓库
git remote add origin https://github.com/jiangerOne/learngit.git
git push -u origin master
4. 从远程库克隆
git clone [email protected]:jiangerOne/javaProject.git
四:分支操作:
1. 分支的基本操作: 某个分支的操作不会对其他分支的数据进行影响,如果要同步,则需要合并分支
查看当前的分支: git branch
创建一个新的分支: git branch dev
切换到dev: git checkout dev
git checkout -b dev = git branch+git checkout dev
合并某分支到当前分支:git merge dev
删除分支: git branch -d dev
2. 分支冲突:
当一个分支提交了改变的内容,另一个分支也提交了改变了相同行的内容时,分支合并会冲突。
解决方案:首先解决冲突,可以使用git log --graph.
3. 分支策略
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,
能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
在实际开发中,我们应该按照几个基本原则进行分支管理:
1. 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
2. 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,
比如v10版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
3. 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
4.合并分支时,主分支不要提交,要合并
4. 创建bug分支:
1. 当你在dev上工作时,你突然发现一个bug,但是dev的工作还没有做完,你需要保存dev的环境
跑到master创建bug分支,修复bug
1. 保存dev的当时状态:git stash
2. 切换到master分支上创建bug分支:
git checkout master
git checkout -b bug--01
3. 修复完bug,合并bug分支,删除bug分支
git merge bug--01
git branch -d bug--01
4. 回到dev,查看stash,删除stash,继续开始工作
checkout dev
git stash list
git stash apply恢复
git stash pop 恢复,删除
5. 强行删除未合并的新分支: 开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
6. 多人合作:
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
7. 多人合作分支:
查看远程库信息,使用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,如果有冲突,要先处理冲突。
五:标签管理:
1. 标签的主要作用是更好的标识版本
2. 创建一个标签
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
git show tag 可以查看tag的信息
3. 删除一个标签:
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
六:自定义git
上颜色
git config --global color.ui true
配置别名:
git config --global alias.st status