成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Goland使用Git的這個幾個高級技巧,效率提升10倍

開發(fā) 前端
簡單來說,當(dāng)你需要把remote的Repository的更改應(yīng)用到本地的分支,使用rebase;但是如果你的本地分支是和別人共享的,那么不要使用rebase,因?yàn)閞ebase會重寫commit的歷史。

簡介

Git作為一個版本控制(version control)的工具,已經(jīng)有近20年的歷史。2005年的時候,Linux Torvalds和其他linux開發(fā)者在使用另一款版本控制工具BitKepper,但是這款軟件是收費(fèi)的,其中一個開發(fā)者逆向破解了BitKeeper,與BitKeeper公司發(fā)生了利益沖突,導(dǎo)致他們不能再使用BitKeeper。

于是Linux Torvalds很快開始開發(fā)Git。很快很多的志愿者加入了Git的開發(fā),正式由于Git的出現(xiàn),后面才出現(xiàn)了諸如Github這樣的開源社區(qū)。

如今,Github和Gitlab是企業(yè)中使用最多的項(xiàng)目管理工具。它們的共同點(diǎn)都是基于Git。

Git工具雖然強(qiáng)大,但是只有你對它有更多的使用和了解,才會真正感知到它的強(qiáng)大之處。

為了能夠更好的理解和使用Git,我們通過下面的故事來感受。

在一個很普通的早上,A同學(xué)騎著單車,準(zhǔn)備去公司上班。A同學(xué)是一名女生,職業(yè)是go開發(fā)者。

9點(diǎn)左右的時候,A同學(xué)到了公司,稍微休息了幾分鐘,就開始投入到今天的工作。今天她要開發(fā)一個新的項(xiàng)目,所以她第一件事情就是拉取這個新項(xiàng)目到自己的goland里面。

下面是她得到的git地址

https://github.com/xxd/go-git.git

然后她到goland,點(diǎn)擊File->New->Project from version control->Git,然后把這個地址復(fù)制到如下輸入框

圖片圖片

在Directory 后面輸入項(xiàng)目要保存的位置,點(diǎn)擊Clone。

如果你覺得需要點(diǎn)很多次,才會出現(xiàn) Clone 的窗口,你可以在goland的 keymap 里面搜索 Clone ,選擇 Repository 里面的Clone,然后給他一個快捷鍵,比如 alt+g

很快項(xiàng)目就拉了下來。

A同學(xué)接著以Debug方式啟動了項(xiàng)目。發(fā)現(xiàn)項(xiàng)目運(yùn)行正常。

然后她準(zhǔn)備開發(fā)用戶管理模塊的功能,比如注冊用戶,查詢用戶,禁用用戶。

于是A同學(xué)按住 alt+n 創(chuàng)建了一個 user 包,接著再按 alt+n ,在user包里面創(chuàng)建了 user.go 文件,在A同學(xué)輸入完user之后,goland會提示她是否把這個文件加入到這個項(xiàng)目的 Git 倉庫,選擇Add ,當(dāng)然要把自己寫的文件加入到項(xiàng)目的 Git 倉庫,因?yàn)楹竺嫖覀円峤贿@個文件到項(xiàng)目的遠(yuǎn)程倉庫。

此時,我們已經(jīng)見到了Git的3個概念。

第一個是遠(yuǎn)程倉庫(Repository),也就是項(xiàng)目代碼在Github上被管理的地方。

第二個是工作區(qū)(working dir),就是我們本地存放代碼的位置。在Github上的Repository和我們本地的項(xiàng)目代碼位置形成了一對remote和local的關(guān)系。我們一般把Github上的倉庫叫做遠(yuǎn)程倉庫,本地的就叫做本地倉庫。

第三個就是分支(branch),我們默認(rèn)拉的是master分支。對于分支的名字,最出名的除了master(主分支),develop(開發(fā)分支),release(發(fā)布分支),staging(預(yù)發(fā)布分支)。

分支是Git的主角,后面的很多操作都會出現(xiàn)他的身影。我們也可以新增自定義的分支,比如feature-2023-11-11 表示2023-11-11要發(fā)布的特性的開發(fā)分支。有時候在分支上也會帶上自己的名字,比如feature-swk表示是孫悟空的開發(fā)分支。

目前對于Github來說,默認(rèn)的分支已經(jīng)是main,而不是之前的master

由此,我們知道一個Repository可以有多個分支,那么同時對于本地來說,也可以有多個對應(yīng)的分支,區(qū)別是一個是remote的,一個是local的。

剛才A同學(xué)點(diǎn)擊Add的操作,實(shí)際上對應(yīng)了如下Git命令

git add user.go

add的文件和沒有add的文件goland是給了不同的顏色來區(qū)分的。就像是被add的文件在城墻里面,沒有被add的文件在城墻外面是完全不同的世界了。

上面只是一個可以被看到的區(qū)別,那么本質(zhì)是什么呢?

這里就需要上一張表達(dá)本質(zhì)的圖

圖片圖片

上面的圖說明了 git add 命令的本質(zhì)效果是工作區(qū)的文件被放入到了staging area,可以理解為一個預(yù)備的文件區(qū)域。就比如你去商場買東西,會拿一個購物車,把自己喜歡的商品先放入到購物車的過程。

git add 也被解釋為 staging the changes。

既然是購物車,到了后面我們也可以將購物車的某個商品拿出去,然后到收銀臺進(jìn)行支付。

大概過了一個小時,A同學(xué)把用戶注冊的功能基本上寫好了,于是她開始自己用postman測試下自己的代碼,過了一會,她發(fā)現(xiàn)沒有問題,于是她開始按ctrl+k(k音同commit的c的發(fā)音)

圖片圖片

在這個窗口,Default Changelist 列出了你已經(jīng) git add之后的文件,哪些是被修改過的,當(dāng)然第一次 git add的文件都是修改過的。

然后是填寫提交信息的 Commit Message 框,比如這里A同學(xué)寫的是注冊用戶,注意 Commit Message 是commit之前必須要填的,不填的不讓commit。

如前圖,commit的內(nèi)容就是我們之前staging area里面的內(nèi)容

我們一般是直接點(diǎn)擊Commit右邊的倒立三角形,選擇Commit and Push。然后就會彈出一個push框,最后點(diǎn)擊push,你寫的代碼就會在Github上對應(yīng)的分支看到了。

如果你是點(diǎn)擊的commit,后面push的時候也可以按ctrl+shift+k來push代碼。

commit 和 push的區(qū)別:commit 是把變更放到本地的repository,push 是把前面commit的變更全部放到remote的Repository

到此,一個企業(yè)里面的提交代碼的git過程就結(jié)束了。

實(shí)際上,隨著業(yè)務(wù)的發(fā)展,我們會不斷的重復(fù)上面這個基本的過程,也就形成了一次次的提交歷史。我們可以到如下圖的地方查看提交歷史

圖片圖片

如上圖,goland提供了Log列,讓我們查看提交歷史,同時可以看到branch,user,date 3個下拉框來過濾我們想要看的歷史記錄。

當(dāng)我們點(diǎn)擊某一次提交,右邊會出現(xiàn)這次提交的文件,同時我們選中一個文件,按ctrl+d可以對比2次提交的這個文件的差異。

如何快速丟棄本地的改變(在staging之前)

注意:Git是基于改變的而不是基于文件來staging的。

比如A同學(xué)剛才已經(jīng)提交了user.go文件,第二天,她又改了這個文件1個小時,發(fā)現(xiàn)需求變了(需要從開始的地方寫),但是自己在user.go里面已經(jīng)寫了很多的代碼,雖然可以按ctrl+z回退,但是想到需要按很多次ctrl+z就很麻煩。

package user


type User struct{


  Name string
  Age int
  //下面是很多新加的代碼
  //new
  //舊的代碼
  //old
  //新的代碼+舊的代碼
  //new+old
}

這類情況可以使用如下命令

git checkout user.go

執(zhí)行這個命令,可以讓user.go回到Repository的狀態(tài),也就是上次提交后的狀態(tài)。這樣就不需要重復(fù)按ctrl+z(按多了,自己也不知道該到什么時候的代碼了)

恢復(fù)已經(jīng)staging的改變

可以使用reset命令

git reset HEAD user.go

這樣會清除剛才staged的改變(基于改變而不是文件),但是工作區(qū)的代碼仍然是不變的

package user


type User struct{
  //新加的注釋
  Name string
  Age int
}

要讓工作區(qū)的代碼回到如下

package user
type User struct{
 
  Name string
  Age int
}

還需要執(zhí)行如下命令

git chekout user.go

如何快速取消某一次commit

有時候,你commit 才發(fā)現(xiàn)這次提交時有問題的,你想取消這次提交的變更。

使用如下命令

git revert HEAD

HEAD 表示是最新一次提交,如果你想取消更久之前的commit,可以帶上每次提交的hash值

git revert  47944b4b9273d756e382c20e259bbdbedd1a6d98

如何查看每次commit的hash值呢?

圖片圖片

在Log里面,選中某次commit,然后右擊,點(diǎn)擊 Copy revision number

注意:上面的git revert只是取消commit,在git log里面取消的commit仍然是存在的,并沒有被刪除

如何刪除一次commit

當(dāng)我們發(fā)現(xiàn)某次提交是錯誤的,我們想刪除這次提交(在提交歷史里面看不到這個提交),使用如下命令

git reset --hard  47944b4b9273d756e382c20e259bbdbedd1a6d98

這個命令會做3個事情:

把HEAD(最新的一次提交)設(shè)置為指定的那次提交,比如目前提交了3次,分別為A->B->C,執(zhí)行 git reset B,就會把HEAD從C變?yōu)锽

  • 把staging area 設(shè)置到指定的那次提交的staging area 的時候

  • --hard則表示會把工作區(qū)的代碼設(shè)置到指定的那次提交的代碼

在goland里面,可以通過選中某一次提交,右擊選擇 Reset Current branch to here。

注意:對本地的分支進(jìn)行 git reset 是沒有風(fēng)險(xiǎn)的,因?yàn)榧词共僮麇e了,仍然可以使用 git checkout 回到最新的代碼。

什么時候用rebase,什么時候用merge

簡單來說,當(dāng)你需要把remote的Repository的更改應(yīng)用到本地的分支,使用rebase;但是如果你的本地分支是和別人共享的,那么不要使用rebase,因?yàn)閞ebase會重寫commit的歷史。

merge 示意圖

圖片圖片

現(xiàn)在A同學(xué)和B同學(xué)在同時開發(fā)這個項(xiàng)目,在第一個白色圓圈到第二個白色圓圈這個階段你們都是使用main分支開發(fā)的;這時候A同學(xué)需要開發(fā)一個feature,因此從第二2圓圈開始checkout出一個分支叫feature;B同學(xué)仍然在main分支7開發(fā)。

過了幾天,A同學(xué)提交了3次代碼(3個綠色圓圈),B同學(xué)提交了2次代碼(2個藍(lán)色圓圈)。

這時候A同學(xué)需要使用到B同學(xué)開發(fā)的內(nèi)容,A同學(xué)使用merge,會產(chǎn)生一個新的commit(第四個綠色圓圈)

rebase示意圖

圖片圖片

如果A同學(xué)使用rebase,那么會把自己的提交放在B同學(xué)之前2次提交的前面。但是不會產(chǎn)生新的commit(commit個數(shù)和rebase之前是一樣的)。這樣當(dāng)我們查看歷史記錄的時候提交節(jié)點(diǎn)之間的關(guān)系更加線性。

在goland如何合并代碼呢?

圖片圖片

圖片圖片

第一步:點(diǎn)擊右下角當(dāng)前的分支

第二步:選擇其中一個遠(yuǎn)程的分支

第三步:點(diǎn)擊 Merge into Current

結(jié)果:會把選擇的分支的更改合并到當(dāng)前分支

Rebase Current onto selected:會把當(dāng)前分支的更改合并到選擇的分支

A into B 表示B會有新的變化 ;A onto B 表示A會有新的變化

責(zé)任編輯:武曉燕 來源: golang學(xué)習(xí)記
相關(guān)推薦

2024-11-19 15:28:15

2022-07-18 08:08:16

Go?語言技巧

2017-03-13 16:48:05

Git技巧

2019-09-26 08:33:51

Nginx技術(shù)Java

2018-01-19 09:00:37

2020-02-03 13:50:17

Windows 10Windows技巧

2024-06-27 11:22:34

2018-07-17 15:51:43

編程語言PythonJSON

2020-10-29 09:06:56

開發(fā)工具技術(shù)

2024-08-29 13:16:51

2021-12-29 11:06:25

Java代碼技巧

2022-12-13 08:45:01

3F傾聽模型

2020-07-08 17:06:00

Python開發(fā)工具

2022-05-10 09:40:26

運(yùn)維游戲實(shí)踐

2017-03-07 14:26:19

Eclipse技巧效率

2011-07-01 10:11:39

2014-09-17 11:20:38

AndroidListView技巧

2020-10-12 19:03:40

Chrome功能瀏覽器

2020-07-22 01:21:26

軟件開發(fā)開發(fā)代碼

2014-08-20 10:02:54

GitGit能力
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 97精品国产97久久久久久免费 | 一区二区三区中文字幕 | 国产午夜精品一区二区三区在线观看 | 夜夜艹天天干 | 欧美无乱码久久久免费午夜一区 | 欧美8一10sex性hd | 国产免费一区二区三区免费视频 | 日韩av一区二区在线观看 | 成人午夜毛片 | 中文字幕一区二区三区日韩精品 | 两性午夜视频 | 91动漫在线观看 | 中文字幕一区在线观看视频 | 欧美色综合一区二区三区 | 精品免费在线 | 亚州激情 | 免费国产精品久久久久久 | 欧美中文一区 | 干干干操操操 | 欧美片网站免费 | 美女视频h | 久久久久久久久久毛片 | 精品乱子伦一区二区三区 | www.操.com| 一区二区三区视频播放 | 国产精品国产成人国产三级 | 日韩免费网站 | 综合精品在线 | 天天操天天射综合 | 黄色一级视频 | 日韩欧美精品在线播放 | 日韩网站在线观看 | 91亚洲欧美| 羞羞视频网站在线观看 | 国产精品免费一区二区三区四区 | 亚洲视频在线看 | 国产一区二区三区视频免费观看 | 免费在线精品视频 | 九色一区 | 日韩在线视频免费观看 | 国产一区欧美 |