CodeGym /Java Blog /Toto sisi /天作之合:Git 和 IntelliJ IDEA
John Squirrels
等級 41
San Francisco

天作之合:Git 和 IntelliJ IDEA

在 Toto sisi 群組發布
秉承既定傳統,我以未來的高級軟件工程師的身份向你們致意。 今天的文章是我關於 Git 的文章天作之合:Git 和 IntelliJ IDEA - 1的邏輯延伸。在關於 Git 的文章中,我描述瞭如何在命令行上使用 Git。今天我將向您展示如何在 IntelliJ IDEA 中完成這一切。在我作為開發人員的旅程之初,我使用命令行並認為我不需要為此使用 GUI。畢竟,一切都很清楚……但直到我開始在 IntelliJ IDEA 中使用 Git 的那一刻……從一開始,我想說我是在描述我的個人經歷。有多種方法可以解決 IntelliJ IDEA 中的任何給定問題。如果您知道比我將在本文中描述的更好的方法,請將其寫在評論中,我們將進行討論。

所需輸入:

  1. 閱讀、跟隨並理解我關於 Git 的文章。這將有助於確保一切都已設置好並準備就緒。
  2. 安裝 IntelliJ IDEA。
  3. 分配一個小時的個人時間來完全掌握。
讓我們使用我在有關 Git 的文章中使用的 演示項目。更新:在發佈時,新的 GitHub UI 將可用,一些圖標將不會出現在文章中顯示的位置。不要驚慌:您只需要要么不切換到新 UI,要么尋找它們。

在本地克隆項目

這裡有兩個選項:
  1. 如果你已經有一個 GitHub 帳戶並想稍後推送一些東西,最好 fork 項目並克隆你自己的副本。
  2. 克隆我的存儲庫並在本地執行所有操作,但無法將整個操作推送到服務器。畢竟,這是我的存儲庫 :)
要從 GitHub 克隆項目,您需要復制項目鏈接並將其傳遞給 IntelliJ IDEA:
  1. 複製項目地址:

    天作之合:Git 和 IntelliJ IDEA - 2
  2. 打開 IntelliJ IDEA 並選擇“從版本控制獲取”:

    天作之合:Git 和 IntelliJ IDEA - 3
  3. 複製粘貼項目地址:

    天作之合:Git 和 IntelliJ IDEA - 4
  4. 系統將提示您創建一個 IntelliJ IDEA 項目。接受提議:

    天作之合:Git 和 IntelliJ IDEA - 5
  5. 由於沒有構建系統並且超出了本文的範圍,我們選擇從現有源創建項目

    天作之合:Git 和 IntelliJ IDEA - 6
  6. 接下來您將看到這個漂亮的屏幕:天作之合:Git 和 IntelliJ IDEA - 7現在我們已經弄清楚了克隆,您可以四處看看。

作為 Git UI 的 IntelliJ IDEA 第一眼

仔細查看克隆的項目:您已經可以獲得很多關於版本控制系統的信息。首先,我們在左下角有版本控制面板。在這裡您可以找到所有本地更改並獲得提交列表(類似於“git log”)。讓我們繼續討論Log。有一定的可視化可以幫助我們準確地了解開發是如何進行的。例如,您可以看到創建了一個新分支,並在 txt commit 中添加了 header,然後將其合併到 master 分支中。如果單擊一個提交,您可以在右上角看到有關該提交的所有信息:所有更改和元數據。天作之合:Git 和 IntelliJ IDEA - 8此外,您可以看到實際的變化。我們還看到那裡解決了衝突。IDEA 也很好地展示了這一點。如果您雙擊在此提交期間更改的文件,我們將看到衝突是如何解決的:我們天作之合:Git 和 IntelliJ IDEA - 9注意到在左側和右側我們有同一文件的兩個版本需要合併為一個。在中間,我們有最終的合併結果。當一個項目有很多分支、提交和用戶時,你需要按分支、用戶和日期分別搜索: 在天作之合:Git 和 IntelliJ IDEA - 10我們開始之前我想解釋的最後一件事是如何理解我們在哪個分支。我給你花點時間弄明白……你找到了嗎?放棄?:D 在右下角,有一個標記為Git: master 的按鈕. “Git:”後面的內容是當前分支。如果單擊該按鈕,您可以做很多有用的事情:切換到另一個分支、創建一個新分支、重命名現有分支等等。天作之合:Git 和 IntelliJ IDEA - 11

使用存儲庫

有用的熱鍵

為了以後的工作,你需要記住幾個非常有用的熱鍵:
  1. CTRL+T — 從遠程存儲庫 (git pull) 獲取最新更改。
  2. CTRL+K — 創建提交/查看所有當前更改。這包括未跟踪和修改的文件(請參閱我關於 git 的文章,其中解釋了這一點)(git commit)。
  3. CTRL+SHIFT+K — 這是將更改推送到遠程存儲庫的命令。所有在本地創建但尚未在遠程存儲庫中創建的提交都將被推送 (git push)。
  4. ALT+CTRL+Z — 將特定文件中的更改回滾到在本地存儲庫中創建的最後一次提交的狀態。如果在左上角選擇整個項目,則可以回滾所有文件中的更改。
天作之合:Git 和 IntelliJ IDEA - 12

我們想要什麼?

為了完成工作,我們需要掌握一個隨處可見的基本場景。目標是在單獨的分支中實現新功能,然後將其推送到遠程存儲庫(然後您還需要創建到主分支的拉取請求,但這超出了本文的範圍)。這樣做需要什麼?
  1. 獲取主分支中的所有當前更改(例如,“master”)。

  2. 從這個主要分支,為您的工作創建一個單獨的分支。

  3. 實施新功能。

  4. 去主分支檢查我們工作時是否有任何新的變化。如果沒有,那麼一切都很好。但是,如果有變化,那麼我們將執行以下操作:轉到工作分支並將更改從主分支重新設置為我們的分支。如果一切順利,那就太好了。但完全有可能會發生衝突。碰巧的是,它們可以提前解決,而不會在遠程存儲庫中浪費時間。

    你想知道為什麼你應該這樣做嗎?這是一種禮貌,並且可以防止在將您的分支推送到本地存儲庫後發生衝突(當然,仍然有可能發生衝突,但會變得更)。

  5. 將您的更改推送到遠程存儲庫。
接下來會發生什麼取決於您的任務和您的想像力。

從遠程服務器獲取更改?

我在 README 中添加了一個新提交的描述,並希望獲得這些更改。如果在本地存儲庫和遠程存儲庫中都進行了更改,那麼我們將被邀請在合併和變基之間進行選擇。我們選擇合併。 輸入 CTRL+T天作之合:Git 和 IntelliJ IDEA - 13您現在可以看到 README 是如何更改的,即從遠程存儲庫中提取更改,並且在右下角您可以看到來自服務器的更改的所有詳細信息。天作之合:Git 和 IntelliJ IDEA - 14

基於master新建分支

這裡的一切都很簡單。
  1. 轉到右下角並單擊Git: master。選擇+ 新分支

    天作之合:Git 和 IntelliJ IDEA - 15
  2. 選中Checkout branch複選框並輸入新分支的名稱。對我來說,它將是readme-improver

    天作之合:Git 和 IntelliJ IDEA - 16

    Git: master然後將更改為Git: readme-improver

讓我們模擬並行工作

為了出現衝突,必須有人創建它們 :D 我將通過瀏覽器使用新的提交來編輯 README,從而模擬並行工作。就好像有人在我處理同一個文件時對它進行了更改。結果會發生衝突。我將從第 10 行中刪除單詞“fully”。

實現我們的功能

我們的任務是更改 README 並為新文章添加描述。也就是說,Git 中的工作是通過 IntelliJ IDEA 進行的。添加:天作之合:Git 和 IntelliJ IDEA - 17更改已完成。現在我們可以創建一個提交。按CTRL+K,這會告訴我們:天作之合:Git 和 IntelliJ IDEA - 18在創建提交之前,我們需要仔細查看此窗口提供的內容。我添加了紅色箭頭來告訴你在哪裡看。這裡有很多有趣的東西。在Commit Message部分,我們編寫與提交相關的文本。然後創建它,我們需要點擊提交. 我仍然沒有找到如何使用熱鍵執行此操作。如果有人知道怎麼做,請寫信給我——那會讓我很高興。我們寫 README 已經更改並創建提交。左下角會彈出一個警告,其中包含提交的名稱:天作之合:Git 和 IntelliJ IDEA - 19

檢查主分支是否發生變化

我們完成了任務。有用。我們編寫了測試。一切安好。但是在推送到服務器之前,我們仍然需要檢查主分支是否有變化。怎麼會這樣?很容易:有人在您之後收到任務,並且有人完成任務的速度比您完成任務的速度快。所以我們需要去master分支。為此,我們需要執行以下屏幕截圖右下角所示的操作:天作之合:Git 和 IntelliJ IDEA - 20在 master 分支中,按CTRL+T從遠程服務器獲取其最新更改。查看發生了什麼變化,您可以輕鬆地看到發生了什麼:天作之合:Git 和 IntelliJ IDEA - 21“fully”這個詞被刪除了。也許營銷人員認為它不應該這樣寫,並給開發人員一個任務來更新它。我們現在有一個最新版本的 master 分支的本地副本。返回readme-improver。現在我們需要將更改從 master 分支重新設置為我們的。我們這樣做:天作之合:Git 和 IntelliJ IDEA - 22如果你做的一切都正確並跟著我,結果應該在 README 文件中顯示衝突:天作之合:Git 和 IntelliJ IDEA - 23這裡我們還有很多信息需要理解和吸收。此處顯示的是存在衝突的文件列表(在我們的示例中為一個文件)。我們可以從三個選項中進行選擇:
  1. 接受你的——只接受來自 readme-improver 的更改。
  2. 接受他們的——只接受主人的改變。
  3. 合併——自己選擇要保留的和丟棄的。
目前尚不清楚發生了什麼變化。如果 master 分支有變化,那肯定是那裡需要的,所以我們不能簡單地接受我們的變化。相應地,我們選擇merge天作之合:Git 和 IntelliJ IDEA - 24這裡可以看到分為三部分:
  1. 這些是自述文件改進程序的更改。
  2. 合併的結果。目前,它是更改之前存在的內容。
  3. 來自 master 分支的更改。
我們需要產生一個讓每個人都滿意的合併結果。查看我們更改之前更改的內容,我們意識到他們只是刪除了“fully”這個詞。好的沒問題!這意味著我們還將在合併結果中刪除它,然後添加我們的更改。更正合併結果後,我們可以單擊Apply。然後會彈出一個通知,告訴我們 rebase 成功了:天作之合:Git 和 IntelliJ IDEA - 25好了!我們通過 IntelliJ IDEA 解決了第一個衝突 :D

將更改推送到遠程服務器

下一步是將更改推送到遠程服務器並創建拉取請求。為此,只需按CTRL+SHIFT+K即可。然後我們得到:天作之合:Git 和 IntelliJ IDEA - 26在左邊,會有一個未被推送到遠程倉庫的提交列表。右側將是所有已更改的文件。就是這樣!按推送,你會體驗到幸福:) 如果推送成功,你會在右下角看到這樣的通知:天作之合:Git 和 IntelliJ IDEA - 27

獎金部分

起初,我不想在本文中添加拉取請求的創建,但沒有它就不完整了。因此,讓我們轉到 GitHub 存儲庫(當然是你的 :)),我們看到 GitHub 已經知道我們想要什麼:天作之合:Git 和 IntelliJ IDEA - 28單擊Compare & pull request。然後單擊創建拉取請求。因為我們提前解決了衝突,所以現在創建一個pull request,我們可以立即合併它:天作之合:Git 和 IntelliJ IDEA - 29這就是我這次想說的。當然,我只是給你開了一點門,給你看了一小部分。您將根據需要了解其餘部分。我有邀請你在 GitHub 上關注我的習慣,我在其中發布涉及我在工作中使用的各種技術的項目。我最近取得了個人成就:我的一個項目獲得了一百多位開發者的好評。當你知道你所做的正在被其他人使用時,會有一種難以置信的喜悅感。並永遠使用它。

有用的鏈接

  1. CodeGym:Git 入門:新手綜合指南
  2. GitHub:用於實踐的演示項目
  3. JetBrains:設置 Git 存儲庫
  4. GitHub:我的賬戶
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION