一,设置GitHub帐号
①,在 Gi t 命令行内使用以下命令生成 .ssh 文件夹
ssh-keygen -t rsa -C "youremail@example.com"
输入命令后一路回车,会在用户主目录(C/User/用户名)下生成一个 .ssh 文件夹,里面有 id_rsa 和 id_rsa.pub 文件
②,在 GitHub 帐号设置的 SSH Keys 下设置参数,Title自己看着取,复制刚才生成的 id_rsa.pub 文件下的内容到 Key 输入框内并保存
以上操作时为了让 GitHub 帐号认识本台电脑,如果需要多态电脑往该帐号推送内容的话就继续添加别的电脑 id_rsa.pub 的内容
③,GitHub下新建仓库,点击加号底下的 new repository ,取仓库名字保存
二,本地推内容到GitHub
①,在本地 Git 命令行下输入
git remote add origin git@github.com:yourgithub/warehouse.git
注意 yourgithub/warehouse.git 是自己的 GitHub 帐号和GitHub上的仓库名字,origin 时远程库的名字,可以自己取
②,第一次推送内容
git push -u origin master
该条命令会将本地版本库内的内容推送到 GitHub 仓库内,并且将本地版本库和 GitHub 仓库的分支关联起来,以后推送就不用这么麻烦了
③,再次推送内容
git push origin master
将修改的内容提交到本地版本库后运行该命令即可将版本库内的内容推送到 GitHub 仓库了
三,从GitHub克隆仓库到本地
git clone git@github.com:yourgithub/warehouse.git
注意 yourgithub/warehouse.git 是自己的 GitHub 帐号和GitHub上的仓库名字
克隆仓库时可能会发生权限问题,提示如下:
Please make sure you have the correct access rights
and the repository exists.
如发生如上错误,查看一下是不是将 .ssh 文件夹从用户主目录移除到别的地方了?如果真的移除了那就再放回去就好了。
如果还不能解决,那我就不知道了,我是这么解决的,你就自求多福吧。
四,添加删除分支,Git 鼓励大量使用分支
1,查看分支:git branch
2,创建分支:git branch <name>
3,切换分支:git checkout <name>
4,创建并切换分支:git checkout -b <name>
5,合并其他分支到当前分支:git merge <name>
6,删除分支:git branch -d <name>
五,解决分支冲突
1,当两个分支都对文件进行修改并提交了的话会发生冲突时间,当试图合并有冲突的两个分支的时候会报错
Auto-merging readme.txt
CONFLICT (content):Merge conflictin readme.txt
Automatic merge failed; fix conflictsandthen commit the result
合并不成功的情况下可以去查看源文件,当试图合并分支的时候 Git 会自动在源文件上标出有冲突问题的地方
2,用 git log --graph 可以查看分至合并图
六,分支管理
1,建立主分支( master ),用于发布版本时使用
2,建立工作分支( dev ),用于平常工作时使用,如果一个人开发就在该分支上工作即可
3,如果是多个人共同协作,那就每个人建立一个分支,每次上传后将各自分支合并到工作分支( dev )上
4,合并分支时可以使用 git merge --no--ff -m "备注信息" <name>,不指定 --no--ff 的话,分支合并模式为Fast forward,使用 --no--ff 模式的话合并后会有历史分支,而 Fast floward 模式则查询不到合并历史
七,Bug 分支
1,修复 Bug 时最好可以另起一个临时分支,然后修复完成后再合并到相应的分支中
2,如果当前工作未完成,而 Bug 需要先行修复,而且当前进行的工作还不适合提交到版本库内,那么可以在当前工作的分区运行 git stash 命令,将当前工作区内容存储起来,该命令运行后使用 git status 查看工作区内容会显示工作区内没有新内容
3,Bug 修复完成之后再回到工作分支中,运行 git stash list 命令查看当前存储的内容有哪些,并使用以下两种方法恢复相应的内容
①,git stash apply :将存储的第 0 个内容取出来,等同于 git stash apply stash{0}
使用该方法恢复内容后内容还是会存在,所以需要手动删除内容,git stash drop:会删除第 0 个内容
②,git stash pop:将第 0 个内容取出来的同时删除掉。
八,功能分支
1,开发新功能时最好可以新建一个功能分支,取名为 feature_xxx
2,如果一个新分支所做的改变不用合并到别的分支 内,就需要直接销毁该新分支,这个时候 git branch -d <name> 是删除不了的,需要使用 git branch -D <name> 强行删除
九,多人协作
1,查看远程库信息:git remote -v
2,从本地提交到远程:git push origin <branch_name>,如果提交时候报如下错误
error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
代表远程库的代码有了变化,需要将远程库的内容抓取回来查看,git pull potel <branch_name>
3,抓取远程库内容的时候如果报如下错误
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream dev origin/<branch>
原因是本地分支和远程分支没有连接,需要重新连接:
git branch --set-upstream <branch_name> origin/<branch_name>
如提示如下内容:
Branch dev set up to track remote branch dev from origin.
即代表关联成功,再次抓取并抓取到的内容内本地内容有冲突的话解决冲突并再次提交
4,需要提交的分支
①,主分支必须提交,以供打包
②,工作分支必须提交,以供日常工作
③,别的分支视情况而定,如自己的工作分支一个人开发该工作的话就不需要上传了,Bug分支也一样
十,标签管理
①,标签作用:用以区别各个时间段的代码,用 commit id 区别的话太乱,所以添加标签
②,创建当前代码的标签:运行命令 git tag <tagname>
创建过去代码的标签:先运行 git log --pretty=oneline 查看过去提交的代码的 commit id ,并运行 git tag <tagname> commitId
创建有注释的标签:git tag -a <tagname> -m "注释" commitId
③,查看标签:
查看标签列表:git tag
查看标签内容:git show <tagname>
④,操作标签:
本地标签推送到服务器:git push origin <tagmame> 或者使用 git push origin --tags 将全部本地标签推送过去
删除本地标签:git tag -d <tagname>
删除远程标签:再运行 git push origin : refs/tags/<tagname>