learn git(远程仓库github)
|由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
友情提示:在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。
如果你不想让别人看到Git库,有两个办法,一个是交点保护费,让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的。
|创建远程库
|关联远程库(根据github该仓库中的提示)***为github帐号(其中origin可修改为其他) learngit为你的仓库地址
$ git remote add origin git@github.com:***
把本地库的所有内容推送到远程库上:
$ git push -u origin master Counting objects: 20, done. Delta compression using up to 4 threads. Compressing objects: 100% (15/15), done. Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done. Total 20 (delta 5), reused 0 (delta 0) remote: Resolving deltas: 100% (5/5), done. To github.com:michaelliao/learngit.git * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
只要本地作了提交,就可以通过下面命令推送最新修改:
$ git push origin master
(该步骤除了第1,2步之外与其他步骤无关联)克隆:远程库已经准备好了,下一步是用命令git clone
克隆一个本地库(****为github帐号):
$ git clone git@github.com:****/gitskills.git Cloning into 'gitskills'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3 Receiving objects: 100% (3/3), done.
克隆远程指定分支
git clone -b <指定分支名> <远程仓库地址>
删除已关联的名为origin
的远程库:
git remote rm origin
多人协作的工作模式通常是这样:(分支推送到远程)
-
首先,可以试图用
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>
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
-
查看远程库信息,使用
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 push -f origin master
-
如果git merge合并的时候出现refusing to merge unrelated histories的错误,原因是两个仓库不同而导致的,需要在后面加上--allow-unrelated-histories进行允许合并,即可解决
如果还不能解决问题,就把本地的remote删除,重新git remote add添加远程仓库,再按上面的方法来,问题解决。
git pull 强制覆盖本地的代码方式,下面是正确的方法: git fetch --all 然后,你有两个选择: git reset --hard origin/master 或者如果你在其他分支上: git reset --hard origin/<branch_name> 说明: git fetch从远程下载最新的,而不尝试合并或rebase任何东西。 然后git reset将主分支重置为您刚刚获取的内容。 --hard选项更改工作树中的所有文件以匹配origin/master中的文件。
修改远程仓库地址方式3种:
1.直接修改远程仓库地址
查看远程仓库地址
git remote -v
修改远程仓库地址
git remote set-url origin [url]
2、先删除再修改地址
git remote rm origin
git remote add origin [url]
3、直接修改配置文件
进入项目根目录
vim .git/config
找到[remote “origin”]下的url,改成新地址即可
4、通过第三方git客户端修改
以SourceTree为例,点击“设置 -> 远程仓库 -> 编辑”, 即可修改该项目下远程仓库地址, 点击“设置 -> 远程仓库 -> 编辑配置文件”, 则可如方法三修改配置文件。