github是一个开源协作平台,也可以作为免费的远程仓库,这一篇主要记录关联github远程库的各种操作,由于我是在windows系统下进行操作的,所以以下操作均已windows为基准
右击桌面菜单,选择打开Git Bash,执行命令:
$ ssh-keygen -t rsa -C 'youemail@example.com'
要将
youemail@example.com
改成自己的github邮箱
C:\User\administrator\
目录下找到.ssh文件夹,里面会有两个文件,id_rsa
和id_rsa.pub
有两种方式可以操作:
推送现有仓库
$ git remote add origin https://github.com/githubname/gitDemo.git
$ git remote add origin git@github.com:yougithubname/project.git
先关联远程库,origin为关联远程库的名称
第一条命令是http关联,缺点是每次提交都需要输入一回账号和密码
第二条命令是ssh关联,需要把sshkey公钥绑定到github的ssh上面
$ git push -u origin master
推送现有仓库到远程库,由于远程库是空的,加了
-u
参数可以把本地的master和远程的master分支关联起来
克隆远程库至本地
$ git clone git@github.com:yougithubname/project.git
$ git clone https://github.com/yougithubname.gitDemo.git
同样的第一条是http的方式,第二条是ssh方式,克隆下来后,默认的远程库关联名为origin
git remote
显示远程仓库分支,如上面的推送仓库的master主分支会显示origin关联名
git remote -v
可以显示更详细的远程库分支
git remote rm origin
删除名为origin的远程库关联
git push origin master
将本地master的分支提交到远程库上
远程库默认clone下来的只有master主分支,clone其他分支命令如下:
git checkout -b dev origin/dev
clone远程的dev分支,并新建到本地dev分支库中
如果和远程库分支版本不同,就需要先拉取,而拉取远程分支到本地需要指定链接
git branch --set-upstream-to=origin/dev dev
将本地分支dev与远程dev分支链接,然后
git pull
拉取更新下来
如果本地当前分支名在远程库不存在时,push
会在远程生成一个新的分支,避免这个情况可以指定分支:
git push origin HEAD:dev
将当前分支提交到远程库的dev分支中,HEAD指向当前分支
$ git branch -vv
master 3caa59 [origin/master] 'xxxxxx'
返回的内容为当前本地分支的列表信息,内容分别为:
master
分支名、3cass59
分支的id、[origin/master]
链接的远程库分支、'xxxxxx'
上一次commit
的描述
将版本分支修改成一条直线,当远程的仓库有更新时,本地无法直接提交,需要先拉取下来,之后查看log
会发现基于上一个版本之后,提交历史分叉了,因为远程拉取下来的分支是基于上一个版本的,本地修改的内容也是基于上一个版本
* 本地版本
|\
| -拉取版本
|/
*上一版本
通过git rebase
可以将本地版本的修改改为不在基于上一版本,而且基于刚刚拉取下来的版本
*本地版本
*拉取版本
*上一版本
当需要寻找指定版本时,commit id
十分难记,可以通过给版本添加标签便于寻找
git tag
命令可以查看所有的标签,返回列表不是按时间顺序,而且按字母顺序的
git show tagname
命令可以查看指定标签名的标签信息
先进入需要打标签的分支git checkout dev
,此处切换到dev分支
git tag v1.0
git tag -a v1.0 -m 'version 0.1'
第一条添加的时一个v1.0的版本
第二条添加一个带有描述的标签,
-a 'xxxx'
为标签名称,-m 'xxxxx'
为描述信息
给以前的commit
添加标签
先通过git reflog
找到commit id
git tag v1.0 10ab2j
git tag -a v1.0 -m 'version 0.1' 10ab2j
10ab2j为指定的
commit id
,通过此命令可以给指定版本添加标签
git tag -d v1.0
删除标签为v1.0的标签
删除远程库的标签,必须要先在删除本地的那个标签
git tag -d v1.0
git push origin :refs/tags/v1.0
默认情况下,标签存在本地,不会被推送到远程库,如果要推送到远程:
git push origin v1.0
git push origin --tags
第一条推送v1.0的标签到远程
第二条推送所有未被推送过的本地标签到远程