Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
git merge feature1 将 feature1 分支合并到当前分支 。 两个分支 合二为一 !
可能出现3种情况:
1 feature1 有修改, 当前分支没有修改(没有 add ,还是commit?) , 那么就 fast-forward 。(可以理解为 feature1 的内容完全基于当前分支 )
2 feature1 无修改, 当前分支有修改, 。。。
3 feature1 有修改, 当前分支有修改, 如果没有冲突就自动合并, 如果有冲突,则需要手动合并冲突。( 这里所谓冲突,一般是指同一行内容不一致的情况? )
4 feature1 无修改, 当前分支没有修改, 不做变化。
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图。
git log --graph --pretty=oneline --abbrev-commit
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
git-br-policy
小结
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
小结
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
软件开发中,总有无穷无尽的新的功能要不断添加进来。
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
现在,你终于接到了一个新任务:开发代号为Vulcan的新功能,该功能计划用于下一代星际飞船。
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
远程仓库的默认名称是origin;
本地仓库的名称? 好像没有。
远程仓库 可以有多个吗?
分支的名字通常是 master、 branch1 , issue, bug, ...
推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
$ git push origin master 是把本地仓库的master 推送到 远程仓库origin, 但是如何指定远程的 分支是哪个 ?
—— 加上 /branchName, 也就是下面的形式:
git checkout -b dev origin/dev
git push origin/dev
小结
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
git log --graph
git remote add origin 有两种方式:
1 ssh, 支持好, 速度快
2 https ,
git remote add origin https://github.com/dawnminghuang/word_recognition.git
———— origin 是个标志可以随便改成自己喜欢的名字
1.3 git add和git commit
git add 就是把目标文件快照放入暂存区域,还没有提交到本地仓库,要把目录下的所有文件都添加到暂存区域进行跟踪,使用命令git add .或者git add -A。
git commit 把暂存区域的文件提交到本地仓库去。这种方式会启动文本编辑器以便输入本次提交的说明,必须要填写提交说明否则无法提交。
或者使用git commit –m ”说明信息”
1.4 git remote,git pull和git push
把远程仓库配置到本地仓库
git remote add:
git remote add origin https://github.com/dawnminghuang/word_recognition.git
origin 是个标志可以随便改成自己喜欢的名字,后面的是远程仓库的名字,dawnminghuang是用户名,word_recognition.git是仓库名。
git pull remote:
git pull https://github.com/dawnminghuang/word_recognition.git
git push:
git push origin master 这时需要输入用户名和密码
过一段时间后,就能够在网上看到自己上传的代码
二、发布代码后,对代码进行修改后怎么更新
更新,只需要在对应的目录下git bash,然后git add,git commit,git push。
三、怎么修正和撤销一些错误
3.1 使用git commit把错误或者不想要的注释信息提交上去
git commit -m 'xxxxx'
那么执行 git commit --amend 修改最后一次提交的信息
执行 'git push origin +master:master' 强制更新
3.2 第一次创建git时,出现错误
error:failed to push some refs to ‘URL’
执行git pull remote name。
================== git remote 操作:
VBIRDCPU2LK+Administrator@vbirdcpu2lk MINGW64 /e/git/gitlearn01 (master)
$ git remote add re1 https://github.com/R1310328554/RelocateJar2mvn.git
VBIRDCPU2LK+Administrator@vbirdcpu2lk MINGW64 /e/git/gitlearn01 (master)
$ git remote
origin
re1
VBIRDCPU2LK+Administrator@vbirdcpu2lk MINGW64 /e/git/gitlearn01 (master)
$ git pull re1
From https://github.com/R1310328554/RelocateJar2mvn
- [new branch] master -> re1/master
You asked to pull from the remote 're1', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
VBIRDCPU2LK+Administrator@vbirdcpu2lk MINGW64 /e/git/gitlearn01 (master)
$ git pull re1/master
fatal: 're1/master' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
You asked to pull from the remote 're1', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
—————— 对应远程仓库 origin, 其分支默认就是 master, 所以不用指定。
git pull origin 和 git pull origin master 效果是一样的 。 ?
对于 其他远程仓库, 其分支是需要手动指定
远程仓库,可以有多个分支, 每个分支可以有不同权限, 只读? 读写? 删除? 等等
============== git fetch
生成密钥:
149 ssh-keygen -t rsa -C R1310328554
150 cat /c/Users/Administrator/.ssh/id_rsa.pub
理解到刚刚好的那个点子上, 才算真正的理解 !
为什么 git push 需要xxx