GitHub和Git---管理远程仓库(六)

管理远程仓库

使用远程仓库的目的:备份,实现代码共享集中化管理
在这里插入图片描述
在这里插入图片描述

1.配置远程仓库免密登陆

(1)在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:ssh-keygen -t rsa -C “[email protected]
备注:一路回车,执行生成 id_rsa 私钥 和 id_rsa.pub 公钥,Windows用户在git bash中输入上述指令

(2)获得key的内容,复制下来,添加到gitHub的SSH key中
windows位置:‪C:\Users\用户名.ssh\id_rsa.pub
Linux位置:cat ~/.ssh/id_rsa.pub

2.添加远程仓库

(https方式)

git remote add origin https://github.com/xxx/LearnGit.git

(ssh方式)

此处可以为https地址也可以是ssh地址,orign为设置的远程仓库的别名,强烈建议使用ssh方式,因为https方式每次都要输入用户名和密码

如果需要修改传输协议:
(1)git remote rm <远程主机名>(删除远程仓库)
(2)设置传输方式和目标远程仓库
(3)git push -u <远程主机名> <本地分支名>

3.查看远程仓库及传输协议

git remote
git remote -v  查看名称和详细地址

4.删除远程仓库

git remote remove <远程主机名>

5.推送本地分支到远程仓库

git push <远程主机名> <本地分支名>:<远程分支名>

如果省略远程分支名,则表示将本地分支推送与之存在“追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

git push origin <本地分支名>
git push origin master

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样以后就可以不加任何参数使用

git push。
git push -u <远程主机名> <本地分支名>  例如:git push -u origin master

6.将远程仓库克隆为本地仓库

git clone git@github.com:xxx/StudyGit.git

注意:
(1)不能使用别名
(2)默认情况下,从远程clone到本地的库只能看到master分支,如果要将远程的分支同步到本地:

git checkout -b <本地分支名> <远程主机名>/<远程分支名>

前提是远程<远程主机名>必须存在名为<远程分支名>的分支,而且<本地分支名>和<远程分支名>最好一致。

7.本地仓库更新

将远程存储库中的更改合并到当前分支中。在默认模式下,git pull是git fetch后跟git merge FETCH_HEAD的缩写。更准确地说,git pull使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中。 使用–rebase,它运行git rebase而不是git merge。

示例:

git pull <远程主机名> <远程分支名>:<本地分支名>

比如,要取回origin主机的next分支,与本地的master分支合并,需要写成下面这样 -

git pull origin next:master

如果远程分支(next)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写为:

git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再执行git merge。

git fetch origin  =>  git merge origin/next

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动“追踪”origin/master分支。Git也允许手动建立追踪关系:

git branch --set-upstream-to=远程主机名/<远程分支名>  <本地分支名>

比如git branch --set-upstream-to=origin/next master,指定master分支追踪origin/next分支。

git pull origin

上面命令表示,本地当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。
如果当前分支只有一个追踪分支,连远程主机名都可以省略。

git pull

上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
如果合并需要采用rebase模式,可以使用–rebase选项。

git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

git fetch和git pull的区别

(1)git fetch:相当于是从远程获取最新版本到本地,不会自动合并。
git fetch origin mastergit log -p master…origin/mastergit merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并
上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmpgit diff tmp git merge tmp
(2)git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些,因为在merge前,可以查看更新情况,然后再决定是否合并。

8.查看分支

git branch

9.创建分支

git branch <name>

10.创建并切换到分支

git checkout -b <name>

备注:git checkout命令加上-b参数表示创建并切换,相当于以下两条命令
git branch git checkout

11.切换分支

git checkout <name>

切换分支后,在git bash中显示为绿色

12.删除分支

git branch -d <name>

如果分支没有合并,删除分支就表示会丢失修改,此时git无法使用-d删除,可使用-D强行删除
git branch -D

13.合并分支

git合并默认使用Fast forward模式,一旦删除分支,会丢掉分支信息,也就看不出来曾经做过合并
git merge #基于当前分支,合并另外一个分支,前提需要保证分支之间不冲突
如果强制禁用Fast forward模式,即普通模式,Git就会在merge时生成一个新的commit

git merge --no-ff -m "there is a comment" <name>

因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
工作中,肯定需要不管有没有分支被删除,都要从分支历史上就查看所有的历史分支信息,所以要使用普通模式合并。

发布了59 篇原创文章 · 获赞 9 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_43229543/article/details/103977924