Git学习——远程仓库
先有本地库,后有远程库,关联远程库
关联一个远程库:git remote add origin git@server-name:path/repo-name.git
如:git remote add origin git@github.com:maotingzi/learngit.git
把本地库的内容推送到远程:git push:git push -u origin master:实际是把当前分支master推送到远程
(由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。)
删除(解除本地和远程的绑定关系)远程库:git remote rm <name>
先用git remote -v查看远程库信息,再使用git remote rm <name>
先有远程库,后有本地库
创建一个新的远程库,用git clone命令克隆一个本地库
如:git clone git@github.com:maotingzi/learngit_1.git
创建与合并分支
查看文件:cat <file name>
创建新分支且切换到新分支(新分支:newbranch):git checkout -b newbranch/git switch -c dev
查看当前分支:git branch(会列出所有的分支,当前分支有个*号)
切换另一分支:git checkout 分支名/git switch 分支名
把newbranch分支的工作成果合并到master分支上:git merge newbranch
合并成功后,删除newbranch分支:git branch -d newbranch
删除后,查看分支:git branch
解决冲突
当一个分支上提交了修改后的文件,切换到master分支后,Git就自动提示我们当前master分支比远程的master分支要超前1个提交,此时提交一个修改的文件,git就无法快速合并,合并时就会发生冲突,就需要手动解决冲突,将两个文件修改的内容合并到一起,git会标记出不同分支的内容,我们修改后进行提交。用带参数的git log也可以看到分支的合并情况。
(git log --graph),最后删除分支(git branch -d <分支名>)
分支管理策略
在合并分支时,git会用Fast forward模式,但是在这种模式下,删除分支后,会丢掉分支信息;若要强制禁用该模式,在合并分支时加上--no-ff,即git merge --no-ff -m "desc" <分支名>:合并时创建一个新的commit,所以加上-m参数,把描述写进去,合并后,用git log查看分支历史。
bug分支
1.修复bug时,创建一个分支 进行修复
2.正在dev分支上进行工作还没有提交时,要先bug修复,此时用git stash命令把当前的工作储藏起来,bug修复后,用查看工作现场存在位置:git stash list,恢复工作活动,有两种方法:
一是用git stash pop恢复到当前继续工作,恢复的同时把stash内容也删了,再用git stash list查看,就看不到任何stash内容了;
二是用git stash apply恢复,但是恢复后,stash内容并不删除,需要用git stash drop来删除。
3.在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit> 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
feature分支
每添加一个新的功能,就新建一个feature分支:git switch -c <分支名>,开发一半时,需要删除此分支,但是删除失败,git会提醒:还没有被合并,如果删除,将失掉修改,若要强制性删除,需要大写的-D参数,即:git branch -D <name>
(要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。)
多人协作(远程仓库的默认名称是origin)
查看远程仓库的信息:git remote(显示更详细的信息:git remote -v)
推送分支:把该分支上的所有本地提交推送到远程库,在推送的时候,要指定本地分支,即:git push origin <branch name>
抓取分支:先试图推送自己的修改,若推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
Rebase(变基)
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。