Git远程仓库及github的使用备注
2015-02-09 15:01
375 查看
远程仓库:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,
如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
把本地仓库的内容推送到GitHub仓库:
下一步,就可以把本地库的所有内容推送到远程库上:
第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。
之后,只要本地作了提交,就可以通过命令:
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
从远程库克隆:
在github上创建一个远程库后使用如下命令进行克隆:
此处需要注意的是:clone 是整个库克隆,也就是一个远程库的文件夹及里面的文件,所以clone项目可以不要创建文件夹,直接进入项目保存目录执行此命令即可!
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
创建与合并分支:
创建dev分支,然后切换到dev分支:
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
用git branch命令查看当前分支:
git branch命令会列出所有分支,当前分支前面会标一个*号。
把dev分支的工作成果合并到master分支上:
git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。
删除dev分支了:
删除后,查看branch,就只剩下master分支了:
小结
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
Bug分支
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
$ git status
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
现在,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
现在修复bug,需要把“Git is free software ...”改为“Git is a free software ...”,然后提交:
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
用git stash list命令查看工作区:
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
Feature分支:
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
多人协作:
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
要查看远程库的信息,用git remote:
或者,用git remote -v显示更详细的信息:
上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
如果要推送其他分支,比如dev,就改成:
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,
如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ ssh-keygen -t rsa -C "youremail@example.com" </span></strong>
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
把本地仓库的内容推送到GitHub仓库:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git remote add origin "SSH clone URL" 如:--git@github.com:omsvip/HelloGit.git</span></strong>
下一步,就可以把本地库的所有内容推送到远程库上:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git push -u origin master </span></strong>
第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。
之后,只要本地作了提交,就可以通过命令:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git push origin master</span></strong>
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
从远程库克隆:
在github上创建一个远程库后使用如下命令进行克隆:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git clone git@github.com:omsvip/gitskills.git</span></strong>
此处需要注意的是:clone 是整个库克隆,也就是一个远程库的文件夹及里面的文件,所以clone项目可以不要创建文件夹,直接进入项目保存目录执行此命令即可!
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
创建与合并分支:
创建dev分支,然后切换到dev分支:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git checkout -b dev Switched to a new branch 'dev' </span></strong>
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git branch dev $ git checkout dev Switched to branch 'dev' </span></strong>
用git branch命令查看当前分支:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git branch * dev master </span></strong>
git branch命令会列出所有分支,当前分支前面会标一个*号。
把dev分支的工作成果合并到master分支上:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git merge dev Updating d17efd8..fec145a Fast-forward readme.txt | 1 + 1 file changed, 1 insertion(+) </span></strong>
git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。
删除dev分支了:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git branch -d dev Deleted branch dev (was fec145a). </span></strong>
删除后,查看branch,就只剩下master分支了:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git branch * master </span></strong>因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
小结
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
Bug分支
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
$ git status
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git stash Saved working directory and index state WIP on dev: 6224937 add merge HEAD is now at 6224937 add merge </span></strong>现在,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git status # On branch dev # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: hello.py # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # </span></strong>
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git stash Saved working directory and index state WIP on dev: 6224937 add merge HEAD is now at 6224937 add merge </span></strong>
现在,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 6 commits. $ git checkout -b issue-101 Switched to a new branch 'issue-101' </span></strong>
现在修复bug,需要把“Git is free software ...”改为“Git is a free software ...”,然后提交:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git add readme.txt $ git commit -m "fix bug 101" [issue-101 cc17032] fix bug 101 1 file changed, 1 insertion(+), 1 deletion(-) </span></strong>
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 2 commits. $ git merge --no-ff -m "merged bug fix 101" issue-101 Merge made by the 'recursive' strategy. readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) $ git branch -d issue-101 Deleted branch issue-101 (was cc17032). </span></strong>
用git stash list命令查看工作区:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git stash list stash@{0}: WIP on dev: 6224937 add merge </span></strong>
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git stash pop</span></strong>
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
Feature分支:
开发一个新feature,最好新建一个分支;
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git checkout -b feature-vulcan Switched to a new branch 'feature-vulcan'</span></strong>
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
多人协作:
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
要查看远程库的信息,用git remote:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git remote origin</span></strong>
或者,用git remote -v显示更详细的信息:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push) </span></strong>
上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git push origin master </span></strong>
如果要推送其他分支,比如dev,就改成:
<strong><span style="font-family:FangSong_GB2312;font-size:14px;">$ git push origin dev </span></strong>
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
相关文章推荐
- windows下使用git和github建立远程仓库
- 使用Git命令从Github远程仓库更新项目
- git使用GitHub远程仓库
- 使用gitbash上传代码到github远程仓库简单教程
- windows下使用git和github建立远程仓库
- 使用Git命令从Github远程仓库更新项目
- 版本管理—Git之使用GitHub搭建远程仓库
- git笔记之eclipse使用github远程仓库进行版本号管理
- Git之使用GitHub搭建远程仓库
- Git之使用GitHub搭建远程仓库
- Git之使用GitHub搭建远程仓库
- windows下使用git和github建立远程仓库
- windows下使用git和github建立远程仓库
- git使用笔记3(在github上创建远程仓库)
- 如何使用git命令同步代码到github或提交到多个远程仓库
- git快速入门(五)远程仓库以及如何使用github
- 使用git将代码存入远程仓库github和从github上克隆代码到本地
- Git安装使用指南与Github远程仓库
- Android基础新手教程——1.5.2 Git之使用GitHub搭建远程仓库
- 使用Git将本地仓库与GitHub远程仓库相关联