这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认 GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
从远程库克隆当已经有一个远程库的时候,我们可以用命令git clone克隆一个本地库:
git clone git@github.com:test/testgit.git你也许还注意到,GitHub给出的地址不止一个,还可以用https://github.com/test/testgit.git这样的地址。实际上Git支持多种协议,默认的git://使用ssh,但也可以使用 https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
创建与合并分支首先我们创建dev分支,然后切换到dev分支:
git checkout -b devgit checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch devgit checkout dev
然后用git branch命令查看当前分支:
git branch我们在dev分支上进行添加修改操作,然后我们把dev分支的工作成果合并到master分支上:
git checkout mastergit merge dev
git merge命令用于合并指定分支到当前分支。
注意到git merge的信息里面可能有Fast-forward字样,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
当然也不是每次合并都能Fast-forward。
合并完成后,就可以放心地删除dev分支了:
git branch -d dev如果要丢弃一个没有被合并过的分支,可以通过git branch -D <branch>强行删除。
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
解决冲突人生不如意之事十之八九,合并分支往往也不是一帆风顺的。
有时候我们进行合并的时候,会提示有冲突出现CONFLICT (content),必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件。
打开冲突文件我们会看到Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改后提交:
git add readme.mdgit commit -m "conflict fixed"
用带参数的git log也可以看到分支的合并情况:
git log --graph --pretty=oneline --abbrev-commit分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下面我们实战一下--no-ff方式的git merge:
首先,仍然创建并切换dev分支:
git checkout -b dev修改readme.md文件,并提交一个新的commit:
git add readme.mdgit commit -m "add merge"
现在,我们切换回master:
git checkout master准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:
git merge --no-ff -m "merge with no-ff" devBug分支
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交。
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?