vscode中 ctrl ~ 即可打开终端 操作与直接在终端中打开基本一致 因此下面操作均直接在终端中进行.
该部分内容部分参考自Git远程操作详解 - 阮一峰的网络日志
这是最简单的一个操作,从远程主机克隆一个版本库.
就用我自己gitee上的一个代码库vins-fusion举例
git clone https://gitee.com/qq408007026/VINS-Fusion.git
这样就克隆下来了 本地主机会生成一个同名目录 (我在自己创建的git文件夹下执行的操作)
如果要指定不同目录名称则在该命令后加上你想要的名字,即
git clone https://gitee.com/qq408007026/VINS-Fusion.git VINS-Fusion123
为了便于管理,git要求每个远程主机都必须指定一个主机名,git remote命令用于管理主机名
不带任何选项时,git remote命令列出所有主机
git remote
以前面clone的VINS-Fusion为例,在下载的VINS-Fusion文件夹中打开终端输入命令
使用-v选项 可以查看远程主机网址
git remote -v
克隆版本库时,所使用的远程主机自动被命名为origin,如果想在clone的时候更改主机名,则使用git clone -o选项克隆
git clone -o OOOrigin https://gitee.com/qq408007026/VINS-Fusion.git
此外,还有一些其他指令
git remote show <主机名>
该指令可以查看该主机详细信息
git remote add <主机名> <网址>
该指令可以添加远程主机 这里我把我自己github上的VINS-Fusion库的远程主机添加进去
git remote rm <主机名>
该指令可以删除远程主机 这里我将上面刚添加的github远程主机删除掉
git remote rename <旧名> <新名>
该指令可以更改远程主机名
一旦远程主机的版本库有了更新(git属于叫做commit),如果需要的话,可以将这些更新取回本地,这时候要用到git fetch命令
取回所有分支
git fetch <远程主机名>
取回特定分支
git fetch <远程主机名> <分支名>
所取回的更新要通过<远程主机名>/<分支名>的方式读取
git branch -r //查看远程分支
切换英文键盘 按q退出 即可这个界面
git branch -a //查看所有分支
修改本地分支名,可采用以下命令
git branch -m <旧名> <新名>
取回远程主机更新之后,可以在它的基础之上,使用git checkout命令创建一个新的分支.
git checkout -b <新分支> <远程主机名/远程分支>
git checkout <分支名>
即可切换到任意分支
删除分支有两种操作(删除之前要记得切换到别的分支,不然会报错)
git branch -D <本地分支名>
未切换到其他分支时报错
此外可以使用git merge或者git rebase命令,在本地分支上合并远程分支(其实这两个命令是有区别的,目前因为我是初学者没有学明白,日后学明白再仔细解释)
git merge origin/master
或
git rebase origin/master
//在当前分支合并远程分支
我在我gitee的VINS-Fusion的rosNodeTest.cpp第32行加了一行注释
//为了git的演示操作添加的注释
这个在我本地clone时候是没有的,来模拟一下远程主机的更新.
执行操作后,可以看到多了一行注释
git pull 命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并
git pull <远程主机名> <远程分支名>:<本地分支名>
当远程分支与当前分支合并时,冒号及之后内容可省略
git pull <远程主机名> <远程分支名>
大致相当于执行了git fetch 和git merge操作
我又在远程主机上面同样注释处,写了git pull 演示这几个字,执行操作后可见本地代码已更新
下面追踪部分总报错,有时候又不报错正常追踪,这里还有待完善!
在某些场合,git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone
的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master
分支自动"追踪"origin/master
分支。
git也可以手动建立追踪消息
git branch --track <本地分支名> <远程主机名>/<远程分支名>
或者
git branch --set-upstream-to=<远程主机名>/<远程分支名>
例如我在远程主机建立一个HUTAO分支,然后在本地创建一个分支hutao追踪origin/HUTAO分支
当前分支追踪到远程分支好像只需要
git branch --track <远程主机名>/<远程分支名>
使用git branch -vv命令查看追踪情况
git branch -vv
此外,当前分支与远程分支存在追踪关系,git pull可省略远程分支名,如果当前分支只有一个追踪分支,可省略远程主机名,命令变成如下两条
git pull <远程主机名>
git pull
如果合并需要rebase模式,可以使用以下命令
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
如果远程主机删除了某个分支,默认情况下,git pull
不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull
不知不觉删除了本地分支。
但是,你可以改变这个行为,加上参数 -p
就会在本地删除远程已经删除的分支。
git pull -p
或者
git fetch --prune origin
git fetch -p
将本地分支的更新,推送到远程主机
注意分支推送拉取顺序是<来源地>:<目的地>
git push <远程主机名> <本地分支名>:<远程分支名>
比如我在本地代码同样地方的注释后面再加一句注释,将其push到远程主机
先用git add .将文件添加到暂存区,然后用git commit -m ""添加注释
之后提交即可(username为gitee邮箱 下一行是密码)
此时,在gitee这边可以看到注释增加了
如果省略远程分支名,则代表推送到带有追踪关系的远程分支,若该远程分支不存在,则会被新建出来,例如
git push origin master
上面命令表示,将本地的master
分支推送到origin
主机的master
分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
git push origin :master
等于
git push origin --delete master
上面命令用于删除远程主机的master分支.
如果当前分支只有一个追踪分支,那么主机名也可省略,例如
git push
如果当前分支与多个主机存在追踪关系,则可以使用-u
选项指定一个默认主机,这样后面就可以不加任何参数使用git push,例如
git push -u origin master
上面命令将本地的master
分支推送到origin
主机,同时指定origin
为默认主机,后面就可以不加任何参数使用git push
了。
不带任何参数的git push
,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config
命令。
还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用--all
选项。
git push --all origin
上面命令表示,将所有本地分支都推送到origin
主机。
如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull
合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force
选项
git push --force origin
上面命令使用--force
选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用--force
选项。
最后,git push
不会推送标签(tag),除非使用--tags
选项。
git push origin --tags
为了能在本地对远程主机处的代码进行修改,需要在gitee上添加自己电脑的ssh公钥,使用以下两条命令可查看自己的电脑公钥
cd ~/.ssh
cat id_rsa.pub
如果设置过公钥的话,则会显示出来一大段数字字母,这个就是公钥了
如果没设置过的话,则通过以下命令设置,一直按ENTER即可
ssh-keygen -t rsa
最后即可得到ssh公钥,然后去gitee设置个人私钥,因为只有个人私钥才能对仓库进行写操作
随便起个标题名字,然后把之前生成的公钥粘贴进去, 即可.
在添加完ssh公钥之后
在gitee新建一个仓库,注意根据自身需要选好仓库是私有还是开源
在终端中打开到自己代码的目录下
首先初始化仓库
git init
之后使用git remote系列命令添加远程主机,并查看.
git remote add origin https://gitee.com/qq408007026/test.git
git remote -v
然后git add .将文件添加到暂存区,会把本地所有untrack的文件都加入暂存区
(此外还有git add *操作,粗糙理解是这个命令会把所有文件都放进去,不管track untrack,目前还没搞懂,以后再说~~~)
git add .
git commit本地暂存的修改提交到版本库
git commit -m "first commit"
效果大致如下
追踪一下远程分支
方法1:(在远程主机未创建任何分支时可直接这样追踪,不过追踪关系变成远程追踪本地分支了,不太清楚和本地追踪远程分支有什么区别,宗旨可以push代码,也可以尝试第二种方法)
git branch --track origin/master
方法2:
在gitee处初始化readme文件,这时候就有了一个master带着两个readme文件,个人一般习惯删除掉这两个readme,之后在本地终端处
git fetch origin
git branch --set-upstream-to=<远程主机名>/<远程分支名>
即可得到一个本地追踪远程的结果(效果图日后再放)
追踪成功之后
git push即可,远程仓库即有了代码