主頁 >  其他 > IntelliJ IDEA 下玩轉 Git !

IntelliJ IDEA 下玩轉 Git !

2021-12-18 08:12:17 其他

有一天我看見我們公司的同事在討論合并代碼怎么怎么不舒服,不方便,就是每次合并都很難搞的樣子,

3de66eee1015df29249f3791ff6cf6b7.png

我說 這不是用 Idea 很簡單就處理好了嗎,后面我了解到,他們在處理代碼沖突的時候都是通過手動處理沖突的,我驚了!

89aa5cfc5f3d60e800b59181c12e95b9.png

2019 年的時候 我在知憾訓答過一篇 關于 Idea 技巧的一篇文章,不過那個時候更多是一些快捷鍵操作的一些奇淫技巧,

83b9654cfd5c834faac5438b808f4c00.png

對 Git 版本管理這塊講的不多,在 2 年后的今天,被我們現在的同事刺激了一下,自己決定完善一下 Idea 下 Git 版本的操作他們,

Git 派系介紹

其實在公司里面 Git 管理這塊也是分為幾大派系的

黑窗

9e0533dddf0a7802078d63a4fdc945f6.png

一個黑窗走天下,任何工具都是花里胡哨,

44ec1a253ffe49308d7262e3df396365.png

所有的操作都是通過命令列完成,

個人愚見:這種方式雖然很酷很帥,但是畢竟只有一個黑窗,在某些場景下還是比較難處理,比如 歷史代碼查看,代碼合并,變更檔案詳細內容查看,

雖然很帥但是不適合我這種菜雞,

9376fb3828a45d088985e37cf31a0b0e.png

source tree

8b376918096bbe10b5201be85140ce36.png

source tree 是我見過用的人最多的,很多同事都是使用這個,而且還可以安裝 git flow 插件,可以在里面直接使用 git flow 的作業流,

我也在用,不過用的不多,每個人喜好不同,有的同事喜歡代碼版本管理和代碼撰寫分開,我自己的話恰恰喜歡放在一起,哈哈哈哈哈 蘿卜青菜 各有所愛,

功能很全面,但有一個問題,可能就是查看單檔案或者檔案夾的 歷史不是很方便

fa7876e96d043e3ab181f452e493e596.png

Github Desktop

beacd78252874acb0095a81adaffd7b4.png

Github Desktop 俗稱 Github 親兒子,很早之前用過 跟 Source Tree 差不多,偶爾看到一個同事在使用這個,還是那個版本管理與代碼撰寫的問題,如果平常使用 Github 查看原始碼比較多的還是推薦,因為安裝了這個軟體之后,可以直接在 Github 上有一個按鈕 Open in Github Desktop,

親兒子才有的待遇

然后才是使用 Idea 管理版本

afd26ce26e361a04276932349baf01e2.png

我自己感覺 Idea 的版本管理挺好用的,但是在作業中,除了我自己,我還沒有看見其他人使用過,

b67799244e10b1df4b6e8eeb2dbcd0a0.png

不過工具本來就沒有最好的,只有最適合你自己的,我個人使用 Idea 下的版本管理比較順手一點,就在這里簡單介紹一下,

查看這行代碼是誰改的

42b61e1eeab2a4e95ccf4e8a7fc0a93b.png

在編輯器左側右鍵,選擇 Annotate with Git Blame

2f75a2fb846987579f6c7f57b2483e3e.png

cd0a7521d434e6f33f9042b07610d19e.png

點擊 左側時間會在彈出的子視窗中顯示這次修改的 hash,提交評論,和同步修改的檔案有哪些

復現代碼沖突

這里需要重點講一下,因為我最近居然發現我們的同事居然還是用非常原始的方式解決沖突,就是一個檔案一個檔案的洗掉 ======= 這個,當時我看見的時候,我自己都驚呆了,

我們先手動的制造一個沖突

mkdir test; 
cd test;
git init -y;
echo 'console.info("one line")' > index.js;
git add .; git commit -m 'init';
git checkout -B feature/two;
vim index.js; # 在第二行添加 console.info("two line")
git add index.js; git commit -m 'feat: two line';
git branch master;
# 創建分支 3 
git checkout -B feature/three;
vim index.js; # 在第二行添加 console.info("three line")
git add index.js; git commit -m 'feat: three line';

git checkout master
# merge feature/two
git merge feature/two # 這個時候不會發生沖突

git merge feature/threee # 沖突發生

79f842f7f73c40377d060174cc07b23b.png

上圖展示了發生沖突的所有程序

解決沖突

上面我們已經制造出了一個沖突,這個時候我們通過 Inteillj Idea 自帶的 Version Controller 的功能來處理這個沖突,

直接在編輯器中打開沖突檔案夾

ae9874f47bdbc91b29a570871a9abca4.png

這里會有一個問題,就是在真正的專案場景下,專案檔案非常的多,

42194627dc37bbcf08b2d46b46349063.png

在專案檔案上右鍵,選擇 Git,選擇 Resolve Conflicts

d465479e0fd57f7f19686e1bc011bf2e.png

點擊之后會彈出一個處理沖突的彈窗,接下來好好介紹一下這個彈窗

  • 1. 待合并分支

  • 2. 當前分支

  • 3. 沖突的檔案串列

  • 4. 全部以當前分支「master」為準,丟棄待合并「feature/three」分支沖突檔案

  • 5. 全部以待合并分支「feature/three」為準,丟棄當前分支「master」沖突檔案

  • 6. 點擊 merge 會打開一個子視窗合并明細

  • 7. 雙擊檔案和打開一個子視窗進行代碼 merge 明細

  • 8. 顯示了合并分支檔案狀態,上圖示識合并的兩個分支 檔案都是更新狀態

  • 9. 以分組串列的形式展示

a8132769a098e0ebe063bd32f6d8ef1c.png

這里就進入到詳細的單檔案合并步驟了

  • 1?? 當前分支的修改

  • 2?? 合并區域

  • 3?? 待合并分支的修改

  • 4?? 顯示本次合并的明細,就是看除了當前檔案還有哪些檔案需要合并

  • 5?? 將左側 console.info("two line") 合并

  • 6?? 將右側 console.info("three line") 合并

  • 7?? 直接接受左側的代碼

  • 8?? 直接接受右側的代碼

  • 9?? 參考合并的內容

查看代碼歷史

bd3b7268f745655ac0ca9c1251098192.png

點擊 Show History

d505cae358d02447e5c93df28c186b56.png

點擊 Show History 之后底部會彈出當前專案的歷史提交記錄

  • 1?? 這里顯示的當前專案的提交記錄

  • 2?? 可以指定想要查看歷史記錄的分支

  • 3?? 可以選擇只看某個人的提交記錄

  • 4?? 時間賽選

  • 5?? 選中左側的提交記錄,這里會展示此次變更了哪些檔案,雙擊檔案會在彈出的新視窗中顯示代碼變更情況

上面是直接選中的整個專案查看整個專案的歷史提交記錄,有的時候我們只想查看某個檔案夾,或者是某個檔案的代碼變更記錄,整個時候我們只需要在對應的檔案夾或者檔案上右鍵懸著即可,

分支創建

根據實際作業場景出發,先列舉一下會創建分支的集中情況,在實際的應用場景來看如果用 Idea 來解決,

  • 開發新功能,我們需要從現有分支創建新的 feature 分支

  • 我們正在開發 feature 分支,但是此時線上出 Bug,我們需要從 master 分支創建 hotfix 分支來修復

  • 我們在瀏覽源代碼,我們瀏覽代碼歷史上某個版本的代碼

從現有分支創建新的 feature 分支,這是最簡單的,甚至都不需要用 idea 了,代碼也是一行搞定 git checkout -B feature/xxx

85b8e206f067a8b353ac2168908c8e39.png

直接從專案上直接右鍵創建即可

  • 我們正在開發 feature 分支,但是此時線上出 Bug,我們需要從 master 分支創建 hotfix 分支來修復

這種情況其實是正式專案中的常態吧,畢竟線上環境是復雜的,問題隨時都會發生,但是問題就是可能我們現在開發的 feature 分支還沒有開發完成,我們自己也不想用 commit 進行提交,這個時候就需要用到 git 的 stash 功能了,

3d37969bb9c7bfc713a47f372d4e3d3a.png

在切換前先 Stash Changes,將目前修改的代碼暫存

b6bc7dd412f51c5b47e7085773adefd3.png

在彈窗中給這次暫存添加 備注 然后點擊 create stash

在處理好 stash 之后我們需要切回到 master 分支去創建對應的 hotfix 分支

0b9398de857cf5554ae143f988a5b49c.png

點擊 Branchs

ed56068258fc115a4967e5a41d266b19.png

選擇 master 分支進行切換,切換后創建對應hotfix 分支,在修復好 hotfix 分之后,我們需要回到對應的 feature 分支繼續開發未開發完成的功能,

57f7bde3ce1f33293d6a732d742daf1e.png

選擇 Unstash Changes

a4f6050e5680ee7ff7f54ff91bbb551f.png

這里會有自己存盤的 stash 歷史,點擊 apply stash 進行恢復

  • 我們在瀏覽源代碼,我們瀏覽代碼歷史上某個版本的代碼

b2617172816ba5729e4c16d4e53305d3.png

添加修改「git add xxx」

我們每次新增的代碼需要通過 git add xxx 命令將代碼從作業區添加到快取區

8c3d5642dbbec9e7e175396804ee3034.png

上面的 add.js 檔案是我們新添加的檔案

06863778cadb73dc131d57ef6d69c273.png

提交修改「git commit xxx」

f7dfce1c2eb5c1df47302c3e058cbf6e.png

點擊 Commit Directory

8015120b7152495684d1a9b897c50edc.png

🐶 本次 commit 的檔案串列

🐱 檔案修改了,但是沒有在快取區的檔案

🐭 修改串列,我們可以為某個代碼檔案集合專門命名 change list

🐹 作者

🐰 Amend commit

🦊 Sign off commit

🦝 在提交之前 格式化代碼

🐻 Rearrange 代碼

🐼 優化 imports,在代碼中沒有使用的 package 會自動洗掉

🦘 分析代碼,如果有代碼例外會提示

🦡 簡單代碼有沒有 TODO 沒有完成會提示

🐨 優化代碼

🐯 更新 copy right

🦁 提交的message

🐮 上下選擇看其他檔案的變動

🐷 選中檔案的代碼變動

🐽 commit

推送代碼 「git push」

79163d44a40f22a739cd5bcb908f9417.png

拉取代碼「git pull xxx」

8ecbd1afa95f2b92d5b7fa3bb91c2f56.png

在便捷一點

其實上面介紹的基本上就涵蓋了我們日常專案中大部分使用的功能了,但是可以看到我們在上面演示的操作基本上不是在檔案夾上右鍵選單來選擇,但是說實話不是太跟手,用起來很麻煩,

其實 Jetbrains 的開發人員應該也是考慮到了這一點,其實在軟體的界面中有很多位置可以操作 Git

fe5f3f4581b7082518011d6806e79151.png

?? 拉取代碼

🧡 提交代碼

💛 推送代碼

💚 查看歷史

💙 rollback

1fdfb53840f9e0a1d8dd7ef0fc78d79a.png

點擊下方的版本號,也可以看到所有本地的分支和遠程的分支,可以在這里進行分支合并,和遠程代碼更新,

在快一點 VCS Operations

代碼的更新與提交提示是一個非常高頻的操作,它值得擁有更加便捷的方式,Jetbranins 也提供了更加編輯的方式

808f147b21359e7d3ef2636d88d8ca5e.png

Mac: ctrl + v

上面提到的所有的操作 在這里都提供了便捷的操作方式

  • Commit

  • Rollback

  • Show History

  • Annotate With Git Blame

  • Show Diff

  • Branches ...

  • Push ...

  • Stash Changes ...

  • UnStash Changes ...

這里不僅可以用 Git 的功能,還有 Idea 自己的 Local History 也背展示在了這里

一些快捷鍵

正常編碼的情況下 使用快捷鍵的方式肯定更快,一下是針對 Git 操作整理的快捷鍵

名稱

對應 Git 操作

快捷鍵「Mac」

將檔案添加到作業區

git add xxx

Option + Command + A

將作業區檔案添加至快取區

git commit xxx

Command + K

拉去遠程代碼

git pull xxx

Command + T

推送代碼到遠程倉庫

git push xxx

Command + Shift + K

暫存檔案

git stash xxx

Ctrl + V -> Stash

恢復暫存

git stath pop

Ctrl + V -> Un Stash

洗掉掉緩沖區修改

git reset --hard ^

Command + Shift + Z

解決沖突


Ctrl + V -> Resolve Conflicts...

若有識訓,就點個贊吧

本文由作者 胡川港 投稿,如果你在 CSDN、博客園、掘金等平臺有寫技術博客的習慣,想讓自己的原創博客被更多人看到,可以來 Java后端 投稿,


【END】

如果看到這里,說明你喜歡這篇文章,請轉發、點贊,微信搜索「web_resource」,關注后回復「進群」或者掃描下方二維碼即可進入無廣告交流群,

↓掃描二維碼進群↓

c581cfd3883f7d51522b7ce0adde8277.png

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/384213.html

標籤:其他

上一篇:Spring專案最簡單的方式用單元測驗來測介面

下一篇:JMeter可視化界面,點擊open出錯

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more