Ubuntu 终端/vscode git操作

 vscode中 ctrl ~ 即可打开终端 操作与直接在终端中打开基本一致 因此下面操作均直接在终端中进行.

 

一 git 操作

该部分内容部分参考自Git远程操作详解 - 阮一峰的网络日志

Ubuntu 终端/vscode git操作_第1张图片

 1.git clone

这是最简单的一个操作,从远程主机克隆一个版本库.

就用我自己gitee上的一个代码库vins-fusion举例

git clone https://gitee.com/qq408007026/VINS-Fusion.git

这样就克隆下来了 本地主机会生成一个同名目录 (我在自己创建的git文件夹下执行的操作)

Ubuntu 终端/vscode git操作_第2张图片

如果要指定不同目录名称则在该命令后加上你想要的名字,即

git clone https://gitee.com/qq408007026/VINS-Fusion.git VINS-Fusion123

Ubuntu 终端/vscode git操作_第3张图片

2. git remote

为了便于管理,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 <主机名>

 该指令可以查看该主机详细信息

Ubuntu 终端/vscode git操作_第4张图片

git remote add <主机名> <网址>

该指令可以添加远程主机 这里我把我自己github上的VINS-Fusion库的远程主机添加进去

git remote rm <主机名>

该指令可以删除远程主机 这里我将上面刚添加的github远程主机删除掉

git remote rename <旧名> <新名>

该指令可以更改远程主机名

 3. git fetch

一旦远程主机的版本库有了更新(git属于叫做commit),如果需要的话,可以将这些更新取回本地,这时候要用到git fetch命令

取回所有分支

git fetch <远程主机名>

 Ubuntu 终端/vscode git操作_第5张图片

 取回特定分支

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时候是没有的,来模拟一下远程主机的更新.

Ubuntu 终端/vscode git操作_第6张图片

执行操作后,可以看到多了一行注释

Ubuntu 终端/vscode git操作_第7张图片

 4. git pull

git pull 命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并

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

当远程分支与当前分支合并时,冒号及之后内容可省略

git pull <远程主机名> <远程分支名>

大致相当于执行了git fetch 和git merge操作

我又在远程主机上面同样注释处,写了git pull 演示这几个字,执行操作后可见本地代码已更新

Ubuntu 终端/vscode git操作_第8张图片

Ubuntu 终端/vscode git操作_第9张图片

 下面追踪部分总报错,有时候又不报错正常追踪,这里还有待完善!

在某些场合,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

5. git push

将本地分支的更新,推送到远程主机

注意分支推送拉取顺序是<来源地>:<目的地>

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

比如我在本地代码同样地方的注释后面再加一句注释,将其push到远程主机

Ubuntu 终端/vscode git操作_第10张图片

 先用git add .将文件添加到暂存区,然后用git commit -m ""添加注释

 之后提交即可(username为gitee邮箱 下一行是密码)

Ubuntu 终端/vscode git操作_第11张图片

 此时,在gitee这边可以看到注释增加了

Ubuntu 终端/vscode git操作_第12张图片

 如果省略远程分支名,则代表推送到带有追踪关系的远程分支,若该远程分支不存在,则会被新建出来,例如

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

二 其他

1. ssh公钥

为了能在本地对远程主机处的代码进行修改,需要在gitee上添加自己电脑的ssh公钥,使用以下两条命令可查看自己的电脑公钥

cd ~/.ssh
cat id_rsa.pub

如果设置过公钥的话,则会显示出来一大段数字字母,这个就是公钥了

Ubuntu 终端/vscode git操作_第13张图片

 如果没设置过的话,则通过以下命令设置,一直按ENTER即可

ssh-keygen -t rsa

最后即可得到ssh公钥,然后去gitee设置个人私钥,因为只有个人私钥才能对仓库进行写操作

随便起个标题名字,然后把之前生成的公钥粘贴进去, 即可.

2. 本地代码提交到新创建的gitee仓库

在添加完ssh公钥之后

在gitee新建一个仓库,注意根据自身需要选好仓库是私有还是开源

Ubuntu 终端/vscode git操作_第14张图片

在终端中打开到自己代码的目录下 

首先初始化仓库

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"

 效果大致如下

Ubuntu 终端/vscode git操作_第15张图片

 追踪一下远程分支

方法1:(在远程主机未创建任何分支时可直接这样追踪,不过追踪关系变成远程追踪本地分支了,不太清楚和本地追踪远程分支有什么区别,宗旨可以push代码,也可以尝试第二种方法)

git branch --track origin/master

 方法2:

在gitee处初始化readme文件,这时候就有了一个master带着两个readme文件,个人一般习惯删除掉这两个readme,之后在本地终端处

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

即可得到一个本地追踪远程的结果(效果图日后再放)

追踪成功之后

git push即可,远程仓库即有了代码

Ubuntu 终端/vscode git操作_第16张图片

你可能感兴趣的:(ubuntu,git)