Ubuntu 终端/vscode git操作
?vscode中 ctrl ~ 即可打開終端 操作與直接在終端中打開基本一致 因此下面操作均直接在終端中進行.
?
一 git 操作
該部分內容部分參考自Git遠程操作詳解 - 阮一峰的網絡日志
?1.git clone
這是最簡單的一個操作,從遠程主機克隆一個版本庫.
就用我自己gitee上的一個代碼庫vins-fusion舉例
git clone https://gitee.com/qq408007026/VINS-Fusion.git這樣就克隆下來了 本地主機會生成一個同名目錄 (我在自己創建的git文件夾下執行的操作)
如果要指定不同目錄名稱則在該命令后加上你想要的名字,即
git clone https://gitee.com/qq408007026/VINS-Fusion.git VINS-Fusion1232. 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 <主機名>?該指令可以查看該主機詳細信息
git remote add <主機名> <網址>該指令可以添加遠程主機 這里我把我自己github上的VINS-Fusion庫的遠程主機添加進去
git remote rm <主機名>該指令可以刪除遠程主機 這里我將上面剛添加的github遠程主機刪除掉
git remote rename <舊名> <新名>該指令可以更改遠程主機名
?3. git fetch
一旦遠程主機的版本庫有了更新(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時候是沒有的,來模擬一下遠程主機的更新.
執行操作后,可以看到多了一行注釋
?4. git pull
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 -p5. git push
將本地分支的更新,推送到遠程主機
注意分支推送拉取順序是<來源地>:<目的地>
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二 其他
1. ssh公鑰
為了能在本地對遠程主機處的代碼進行修改,需要在gitee上添加自己電腦的ssh公鑰,使用以下兩條命令可查看自己的電腦公鑰
cd ~/.ssh cat id_rsa.pub如果設置過公鑰的話,則會顯示出來一大段數字字母,這個就是公鑰了
?如果沒設置過的話,則通過以下命令設置,一直按ENTER即可
ssh-keygen -t rsa最后即可得到ssh公鑰,然后去gitee設置個人私鑰,因為只有個人私鑰才能對倉庫進行寫操作
隨便起個標題名字,然后把之前生成的公鑰粘貼進去,?即可.
2. 本地代碼提交到新創建的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即可,遠程倉庫即有了代碼
總結
以上是生活随笔為你收集整理的Ubuntu 终端/vscode git操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文笔记——惯性/视觉/激光雷达SLAM
- 下一篇: Ubuntu下的文件打包与压缩