1. 程式人生 > >【乾貨分享】通過命令操作來學習Git

【乾貨分享】通過命令操作來學習Git

Git是一個開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。GitLinus Torvalds為了幫助管理Linux核心開發而開發的一個開放原始碼的版本控制軟體。本篇文章將從原始的Git命令出發,學習實際開發過程中最常用、最有效的、最基本的命令,幫助Git初學者快速融入團體開發。由於對Git的基本命令的學習是打基礎,而實際的開發過程中大多都是結合開發軟體來完成版本控制,所以學習完基本的命令列操作之後,後期推出基於IntelliJ IDEAGit操作學習筆記。

本篇文章將主要介紹以下幾點內容:

  • Git的基本介紹

  • Git的基本操作

  • Git的分支操作

  • Git的更改提交操作

  • 推送至遠端倉庫

  • 從遠端倉庫獲取

一、Git的基本介紹

如何理解Git?Git是什麼?

對於剛剛加入職場的新人來說,被分配到的第一個任務往往都是:從遠端倉庫把程式碼拉下來,並熟悉程式碼吧。如果你以前從來沒有接觸過Git,那麼拉取程式碼都會有相當大的困難,因為你並不理解怎麼拉程式碼。如果你以前接觸過Git,並在學校使用過Git來進行程式碼的版本控制的話,那麼你應該對Git有個基本的認識,至少會拉取程式碼,新增索引,推送程式碼到遠端倉庫等基本操作。其實大家在學習過程中都有一些基本的版本控制思想,那就是在寫論文的時候,常常會儲存多份文件,分別手動在檔案的命名上進行版本控制,如下圖所示:
論文版本控制


從上圖中可以看出,使用這種原始的手動版本控制,可以做到根據時間點來控制文件的版本,甚至可以回退到某個時間點來編寫文件,或者是將不同時間點的文件進行合併,但是這種人工方式的版本控制始終具有侷限性,整個版本的控制只能由一人來完成,如果多人進行控制,那必定會造成混亂,導致文件內容雜亂不堪,使文件的編輯人員一頭霧水。看著這一堆亂七八糟的文件,想保留其中最新的一個版本,刪除其他的版本,但是又害怕某天被刪除的文件會重新被利用,還不敢刪除。
以上的困擾將被Git終結,Git管理的文件(文字文件)允許多人對同一個文件進行修改,各自修改的內容很方便地進行合併,並且可以基於當前內容建立新的分支,在新的分支繼續進行修改,最後合併到當前分支上,始終保證文件是最新的。
那麼,到底什麼是Git
?舉個傳統方式團隊協作的例子,Jack在開發專案時,發現某一部分需要John完成,於是他把檔案複製了一份發給John,之後繼續自己的工作。第二天John將檔案傳回來,可這時Jack並不知道John對檔案做了哪些修改,也無法清楚地分辨出自己做過的變動,除非他們之間事先做過良好清晰的約定或者Jack等待John完成後再繼續自己的工作。
使用Git則會極大地簡化這一過程。Jack將自己的工作內容上傳到遠端倉庫中,John複製遠端倉庫內容到本地,之後兩個人各自進行自己工作。當John完成工作時,通知Jack拉取專案更新,在拉取過程中, Git會自動合併雙方的修改為一體,如果專案成員的修改發生衝突(比如修改同一處),Git允許你手動選擇使用什麼內容來填充衝突處。這一功能也得益於Git的版本控制機制。在檔案內容發生修改時,Git會將發生修改的部分劃分為區塊進行記錄,以區塊為單位從而實現自動合併。Git還記錄了每次修改的內容節點,在每次提交時,Git生成一個HASH值作為版本號,我們可以通過檢視專案歷史找到想要的版本,並通過版本號將當前版本回滾到指定版本。下圖是本地倉庫和中央倉庫的示意圖:
這裡寫圖片描述
總之,Git的帶來的便捷性遠遠不止這些,在後期的使用中,你將體會到她的迷人之處。

理解Git的工作區和快取區

  • 工作區(working directory
    在新建的資料夾內初始化一個Git倉庫之後,那麼當前資料夾就可以成為是工作區,工作區內的檔案是可以看見的,當然這個工作區不包括初始倉庫生成的.git資料夾。

  • 版本庫(repository
    工作區中有一個隱藏資料夾.git,這個不算工作區,而是Git的版本庫。

Git的版本庫裡存在很多東西,其中最為重要的是stage(或者叫index)的暫存區。還有Git為我們自動建立的第一個分支master,以及指向master的第一個指標叫HEAD。
這裡寫圖片描述
Git中新增,是分兩步執行的:
第一步是用git add把檔案新增進去,實際上是把檔案修改新增到暫存區;
第二步是git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
可以理解為需要提交的檔案統統放在暫存區,然後,一次性提交暫存區的所有修改。

二、Git的基本操作

閱讀上面的內容之後,對Git有了一個基本的瞭解,但是要更加深刻地瞭解Git,得通過操作命令來慢慢了解。下面將介紹Git的常見命令,跟著命令來一步一步學習Git

git init——初始化倉庫

建立一個空資料夾,如果需要使用Git對資料夾內的文字文件進行版本管理,那麼就必須進行倉庫初始化。進入新建的資料夾中,開啟命令列工具,使用git init命令。
這裡寫圖片描述
出現上面的結果表示當前的倉庫初始化成功。初始化成功之後,會在當前資料夾生成一個.git的隱藏資料夾,這個.git資料夾裡儲存著管理當前目錄內容所需的倉庫資料。對於資料夾內的檔案結構,後期將出相應的文章進行介紹。
這裡寫圖片描述
Git中,我們將這個目錄的內容稱為“附屬於該倉庫的工作樹”。“工作樹”就是工作區,檔案的編輯操作都在工作樹中進行,然後記錄到倉庫中,以此管理檔案的歷史快照。如果想要將檔案恢復到原先的狀態,可以從倉庫中調取以前的歷史快照,在工作樹中開啟。具的操作方式將在後面詳細介紹。

git status——檢視倉庫的狀態

git status是一個非常有用的命令,可以通過這個命令來檢視倉庫的當前狀態。
這裡寫圖片描述
因為是剛剛初始化的倉庫,所以顯示正在處於master分支(主分支)下,關於分支內容,後面也會講到,這裡不必過於深究。接下來又顯示了沒有可以提交的內容,如果新建檔案或者拷貝檔案到當前工作樹,可以使用git add來進行追蹤(新增索引)。
現在我們在當前工作樹中新增一個新檔案README.md作為被管理物件,當然任何文字檔案都是可以被管理的,然後再嘗試使用git status來觀察倉庫的狀態。
這裡寫圖片描述
新增完新檔案以後,倉庫的狀態變了,顯示的是當前有未被追蹤的檔案README.md(這裡有一個小細節,新新增的README.md還未被Git管理的時候,顯示的是紅色,後面使用到IntelliJ IDEA的時候,新建立的*.java未被管理之前,檔案顯示也將是紅色,根據顏色也可以判斷當前檔案的狀態)。類似地,只要對Git的工作樹或者倉庫進行操作,git status命令的顯示結果都會發生變化。

git add——向暫存區中新增檔案

如果我明只是在工作樹中新增或者修改了檔案,那麼這個檔案將不會被git管理,換句話說就是無法進行版本管理,那麼新增、修改完檔案,需要將其用Git管理起來,那麼就需要使用到git add命令。git add後面的引數可以是一個資料夾,可以是一個檔案,或者是某一類檔案(*.java)等。
這裡寫圖片描述
新增完之後,再次檢視倉庫狀態,又發生了變化,顯示的是Changes to be committed,表示又未提交的修改(這裡有一個小細節,未提交修改的檔案顯示的是綠色,後期在IntelliJ IDEA中顯示綠色的檔案*.java表示修改後添加了索引但還未提交)。這裡還顯示了可以使用命令git rm --cached <file>來撤銷已新增到暫存區的檔案,這裡只會移除新增到暫存區的資料,不會影響到工作樹中的檔案,我們來具體操作一下。
這裡寫圖片描述
這時候的狀態和新增README.md到暫存區之前的狀態一模一樣。

git commit——儲存倉庫的歷史記錄

  • 記錄一行提交資訊

git commit命令是提交命令,是將已經新增到暫存區的檔案提到到本地倉庫的歷史記錄中,通過這些記錄,就可以在日後的某一天將此時的檔案狀態進行恢復。具體的命令是git commit -m "提交資訊,可以是任何內容"。引數-m之後是提交的資訊,一般都是記錄當前修改的內容等。
這裡寫圖片描述
這就將README.md檔案提交到了本地倉庫中,提交產生的日誌表示新增了一個檔案,沒有刪除任何檔案。

  • 記錄詳細提交資訊

有時候我們提交程式碼的時候僅僅一行提交資訊難以描述清楚本次修改的具體內容,所以需要寫多行描述資訊,那麼我們可以直接使用git commit命令來完成多行提交資訊的記錄。在此之前,我們在剛才測試的檔案中新增一些內容,然後重新提交,測試多行描述資訊編寫的功能,最後測試git commit命令。
這裡寫圖片描述
對其添加了一些內容之後,必須新增索引後才可以進行提交。
這裡寫圖片描述
其中在新增多行提交資訊的時候,新增的方法和使用vim工具對文字檔案進行編輯的方法是一致的,不會使用vim的朋友可以自行學習。

git log——檢視提交日誌

git log是一個很重要的命令,使用它可以檢視當前倉庫提交的日誌資訊,通過日誌資訊可以很方便檢視何人在何時對程式碼進行了提交和合並,以及提交前後的區別。
使用git log檢視剛才我們已經提交的兩次內容,如下圖所示:
這裡寫圖片描述
上圖中顯示了兩次提交的詳細內容,包括commit id(黃色內容部分),也就是指向相應提交的HASH值,這個值是唯一代表本次提交,使用這個值可以輕鬆回退到指定的版本。上圖上還顯示了本次提交的作者和日期時間以及提交的時候編輯的具體提交說明內容。

  • 檢視簡短的提交日誌

有時候並不需要檢視過多的提交日誌,那麼可以使用命令:

git log --pretty=short

來檢視簡短的提交日誌,如下圖所示:
這裡寫圖片描述

  • 只顯示指定檔案或者資料夾提交日誌

有時候只想檢視單個檔案或者指定資料夾的提交日誌,可以使用命令

git log 檔名/資料夾名

來進行檢視,如下圖:
這裡寫圖片描述

  • 檢視檔案的改動內容

檢視檔案的具體的改動,可以新增-p引數來檢視,具體命令如下:

git log -p [檔名/資料夾名]

其中方括號中的內容是可選內容,填寫了就表示檢視指定檔案的改動。
這裡寫圖片描述
從上圖可以看出,最近一次提交相對於前一次提交,增加了一行內容主分支master第一次編寫內容,且顯示第一次提交是新建的檔案。

git diff——檢視更改前後的差別

git diff可以檢視工作樹、暫存區(index)、最新提交(HEAD)之間的差別,可以使用該命令實現檢視自己在程式碼中到底修改了一些什麼內容,它也是一個非常重要的常用命令。

  • 檢視工作樹和暫存區的差別

我們在README.md檔案中再新增一行內容,並將其新增到暫存區中,然後再次修改README.md檔案,使用git diff命令檢視工作樹和暫存區之間的差別。
README.md已有的內容為:
這裡寫圖片描述
可以在後面在再新增一行內容:主分支master第二次編寫內容。然後將它新增到暫存區中,然後再次修改README.md檔案,新增一行內容:主分支master第三次編寫內容。這次不再新增到暫存區,使用命令檢視更改前後的差別。
這裡寫圖片描述
從上圖可以看出,工作樹中的README.md檔案的內容相較於暫存區多了一行。我們再次將README.md檔案新增到暫存區中,然後使用命令git diff進行比較,結果沒有任何顯示,說明工作樹中的檔案和暫存區中的沒有差別。

  • 檢視工作樹和最新提交的差別

使用命令git diff HEAD就可以檢視工作樹和最新提交的差別,緊接著上面的操作,我們將暫存區中的最新更改提交到本地倉庫中,然後嘗試檢視工作樹和最新提交的差別,結果同樣是沒有任何差別,這也是很容易想象的。那麼我們對工作樹中的README.md檔案進行修改,不新增到暫存區也不提交,然後在嘗試進行檢視。
這裡寫圖片描述
我們修改了工作樹中的檔案,而沒有新增到暫存區,所以使用git diff HEADgit diff命令都是指向了工作樹與最新提交的差別。

三、分支操作

使用Git來進行程式碼託管,主要是為了方便團隊和合作開發,並行開發。在並行開發過程中,往往存在多個分支,且各個分支的程式碼的進度都不一樣,開發的內容也不一致,比如develop分支是開發分支,feature是新功能開發分支,master是主分支。對於分支的操作,大多都是新建分支、切換分支、合併分支等。
這裡寫圖片描述
各個分支完全可以獨立開發,等分支作業完成之後,再與主分支mater合併,共同推進專案前進。

  • git branch——檢視分支

使用git branch命令可以檢視本地分支,如果想檢視遠端分支,可以在後面加上引數-a
這裡寫圖片描述
如上圖所示,本地分支有且僅有一個master主分支,前面的*表示我們當前正在master分支上進行開發。

  • git checkout -b——建立、切換分支

如果以當前分支master為基礎建立新的分支,那麼使用命令:

git checkout -b 新分支名稱 [master]

這是一個建立分支的並切換到新分支的一個命令,後面中括號的內容可以省略,預設是以當前分支為基礎,建立新的分支,其中master可以換成遠端分支,這樣就可以在本地以遠端分支為基礎建立一個新的分支。僅僅是切換分支,使用git checkout 分支名稱即可。上面的建立分支的命令可以換成兩行來進行:

git branch 新分支名稱
git checkout 新分支名稱

現在使用命令來建立新的分支:
這裡寫圖片描述
上面的命令是建立的了新的分支並切換到了新的分支上,我們可以使用git branch命令來檢視本地分支:
這裡寫圖片描述
切換到了新的分支,可以通過git status來檢視當前分支的狀態,因為是基於master建立的分支,所以當前分支也有master分支對應工作樹中的最新文件。

  • 特性分支

特性分支一般都是為了完成某項特殊功能的分支,特性分支大多都是從主分支上新建而來,特性分支開發完成之後合併到主分支上。

  • 主幹分支

在實際的專案開發中,master往往擔任著主幹分支的職責,主幹分支往往是穩定的分支,可以部署到正式的環境中。

  • git merge——合併分支

我們對之前建立的新分支feature-A中新增部分內容(新增的內容不影響其他分支),然後新增到暫存區,再提交到本地倉庫,最後將其合併到主分支中。合併到哪個分支,首先就需要切換到哪個分支上,我們需要切換到master分支上,然後在進行合併。
這裡寫圖片描述
上面合併使用到的命令是git merge 被合併的分支名,但是這裡推薦使用git merge --no-ff 被合併的分支名這個命令,因為後者可以將合併記錄到歷史中,方便後面使用給git log --graph進行檢視。
如果合併完想撤銷合併,只要合併後沒有進行新增索引和提交,那麼可以使用git checkout 檔名或者git checkout .來撤銷合併,如果添加了索引,那麼可以使用git rm --cached 檔名來撤銷新增索引。

  • git log –graph——使用圖表方式進行檢視日誌

git log不僅可以檢視提交資訊,還可以檢視合併等資訊,加上引數--graph可以使用圖示方式進行檢視,在第一次合併,我們使用的是命令是git merge 被合併的分支名,這時候,使用git log --graph命令輸出的結果如下圖所示:
這裡寫圖片描述
我們再次修改feature-A分支,再次合併,這次合併使用git merge --no-ff 被合併的分支名這個命令,此時在使用git log --graph命令進行檢視:
這裡寫圖片描述
可以清楚看見,分支合併的過程,這就是在合併時引數--no-ff的作用,--no-ff指的是強行關閉fast-forward方式,fast-forward方式就是當條件允許的時候,git直接把HEAD指標指向合併分支的頭,完成合並。屬於“快進方式”,不過這種情況如果刪除分支,則會丟失分支資訊。因為在這個過程中沒有建立commit

四、更改提交的操作

  • git reset——會退到歷史版本

更改提交操作也是常見的操作,這樣可以方便我們的程式碼回退到某一個時間節點,對於已經提交到本地倉庫的分支,如果要撤銷提交或回退版本,常見的有三種方式,--mixed--soft--hard。那麼,對於這三種方式,到底有什麼區別呢?

  • git reset --mixed [commit id或者HEAD]:此為預設方式,不帶任何引數的git reset,即時這種方式,它回退到某個版本,只保留原始碼的修改,回退掉commitindex資訊。

  • git reset --soft [commit id或者HEAD]:回退到某個版本,只回退掉了commit的資訊,不會恢復到index一級。如果還要提交,直接commit即可。

  • git reset --hard [commit id或者HEAD]:徹底回退到某個版本,本地的原始碼也會變為上一個版本的內容,此命令慎用!

最常用的是第一種預設方式,風險最小,靈活性更高,以上三種回退方式比較重要,建議牢記。

現在一起來做一個小任務,共同學習一下如何來操作歷史版本,首先,我們將工作樹、暫存區、最新提交都恢復到feature-A建立之前,然後再基於master分支建立一個fix-B分支,然後切換到fix-B分支並新增部分內容並提交,然後在恢復到feature-A合併之後,然後將fix-B分支合併到主分支上。所以,我們最終需要的結果是:
這裡寫圖片描述
我們使用命令和commit id切換到指定的歷史版本中,提交日誌是:測試工作樹和最新提交的差別,使用命令:

git reset --hard 316598977bb36a977304dacdf2a48be90f820d3c

其中HASH值是與各自的環境相關,使用命令的時候需要更改為自己的HASH值。
這裡寫圖片描述
因為使用的--hard引數,所以工作樹、暫存區、HEAD都切換到了這個歷史提交版本,檢視README.md內容為:
這裡寫圖片描述
此時建立一個新的分支fix-B,並在該分支中新增部分內容並提交:
這裡寫圖片描述
此時各分支的狀態是:
這裡寫圖片描述
我們再將分支恢復到feature-A合併後的狀態,也就是如下圖所示:
這裡寫圖片描述
因為此時我們所處的狀態是在feature-A與主分支master合併之前,所以要恢復到feature-A,相當於將歷史版本向前推進,也就是“穿梭到未來”。由於命令git log只能檢視以此時為重點的操作日誌,無法查到未來的操作日誌,所以我們需要使用另外一個命令來檢視,git reflog命令就是我們需要的命令。
這裡寫圖片描述
上圖中黃色的內容都是HASH值的一部分(4位以上都可以直接參與執行),所以我們切換到master分支來恢復到feature-Amaster合併的時刻。
這裡寫圖片描述
我們再將fix-B分支合併到主分支master上來:
這裡寫圖片描述
從上圖可知,系統告訴我們自動合併失敗了,原因是發生了衝突,需要我們自己手動解決衝突,然後提交結果。我們使用編輯器開啟README.md檔案,顯示的內容如下所示:
這裡寫圖片描述

=======是合併前與合併後的分界線,我們需要將檔案中的內容修改成為我們需要的樣子並提交修改後的結果,修改完成之後的結果是:
這裡寫圖片描述
解決完衝突以後需要新增到暫存區後,完成提交。
這裡寫圖片描述

  • git commit - -amend——修改提交資訊

當我們第一次提交程式碼的時候,提交資訊可能是完全根據我們自己的意願來寫的,但是呢,公司往往對程式碼的提交資訊的格式有要求,比如需要加上JIRA號等,所以我們偶爾會需要修改提交資訊,那麼使用命令git commit --amend就可以了。使用該命令之後,就可以修改上一次提交的資訊了,進入編輯器之後就可以修改其中的資訊了。
這裡寫圖片描述
再次通過日誌檢視結果,提交資訊成功修改了:
這裡寫圖片描述

  • git rebase -i——壓縮歷史

當提交完程式碼之後,發現程式碼的部分註釋或者其他不太緊要的內容有些錯誤,大多數人的做法是撤銷本次提交,再次修改後重新提交,其實還有一種比較常見的操作,那就是修改部分錯誤,重新提交,然後將這次提交包含到前一個提交之中,壓縮成一個歷史記錄,這樣的效果就是沒有多餘的提交記錄,看起來就是這個小錯誤從來沒發生過一樣。這個小技巧也是很常用的小技巧,我們來測試一下。
基於master分支建立一個新的分支叫feature-C,然後在其中新增一些內容,並認為製造一些單詞拼寫錯誤在裡面,方便後面修改。
這裡寫圖片描述
上圖中README.md檔案最後一行的第一個單詞拼寫錯誤,但是我們使用命令git commit -am "建立feature-C分支"進行了一次性的新增索引和提交。
對於上面製造出來的錯誤,我們在本次進行修改並提交:
這裡寫圖片描述
由於這個分支進行了兩次提交,所以在歷史記錄中就有兩次提交的記錄,但是對於第二次提交,健全的歷史記錄並不需要他們,所以我們希望將這兩次提交歷史合併成為一次歷史,那麼使用Git的相關命令輕鬆可以做到。首先我們檢視兩次提交的歷史記錄:
這裡寫圖片描述
我們使用命令git rebase -i HEAD~2來將兩次提交合並,鍵入命令之後,會開啟編輯器,我們將第二次提交的記錄前面的pick改成fixup即可,就完成了兩次提交記錄的合併,後面可以通過檢視日誌來確認一下。
這裡寫圖片描述
修改完成之後,就會出現最後一行的溫馨提示:
這裡寫圖片描述
我們再次檢視日誌:
這裡寫圖片描述
發現兩次提交成功合併成為一次提交了,且這次提交的commit id也不和之前的都一樣了。最後我們切換到master分支將feature-C合併上來。

五、推送至遠端倉庫

以上的操作都是在本地操作的,作為分佈型版本管理系統,我們需要將本地倉庫的程式碼推送到遠端倉庫,方便其他成員協同開發,這裡採用的遠端倉庫是國產程式碼託管平臺碼雲,至於其他平臺,如全球著名的“同性交友網站”——GitHub,操作方法和原理都是一致的。
我們在碼雲上建立一個公有倉庫,由於我們本次示例都是使用的README.md檔案,所以在建立倉庫的時候,倉庫名稱需要和本地一致,且不需要使用README.md檔案來記錄遠端倉庫的資訊,假設讀者已經建立好了倉庫,且倉庫名稱和本地倉庫名稱一致。接下來我們將設定遠端倉庫中。

git remote add origin [email protected].com:itlemon/git-test.git

其中,[email protected]:itlemon/git-test.git來自碼雲上我們建立的公共倉庫,如下圖所示:
這裡寫圖片描述
使用上面的命令之後,Git會自動將[email protected]:itlemon/git-test.git遠端倉庫的名稱設定為origin(識別符號)。那麼我們下次推送或者切換到遠端分支的時候加上origin識別符號就相當於告訴Git,我們要推送到遠端倉庫或從遠端倉庫切分支到本地倉庫。
接下來,我們將README.md檔案推送至遠端倉庫,使用命令:

git push -u origin master

在第一次推送的時候,可能會遇見各種問題,比如沒有許可權推送、遠端倉庫和本地倉庫有衝突等等,對於沒有許可權推送,多數是因為沒有建立公鑰,那麼我們需要在本地Git倉庫建立公鑰,然後將它設定到碼雲上,對於第一次推送有衝突,那麼可以在上面的命令中新增一個引數-f來強制推送即可(後期不建議使用強制推送,因為會覆蓋遠端倉庫)。上述命令中-u引數是將origin master分支設定為本地master分支的上游(upstream),這樣方便以後拉取程式碼直接使用命令git push,而無需使用git push origin master,最後推送的效果是:
這裡寫圖片描述
從上圖可以看出,本地的11次提交在遠端倉庫也可以進行檢視,如下圖所示:
這裡寫圖片描述

六、從遠端倉庫獲取

對於新入職的員工來說,安裝完Git,配置完許可權,第一步基本都是被告知需要自己將程式碼從遠端倉庫克隆下來,那麼如何克隆,那麼我們需要使用命令:

git clone git@gitee.com:itlemon/git-test.git

使用git clone命令之後,我們在本地就建立了一個本地倉庫,預設處於master分支,那麼我們可以靈活檢視遠端倉庫的各個分支,使用命令:

git branch -a

也就是相較於檢視本地分支列表,多了一個引數-a,假設我們遠端有一個feature-D分支,那麼怎麼把它從遠端倉庫切到本地?第一次切換和建立本地分支命令一致,例如:

git checkout -b feature-D origin/feature-D

第一次將feature-D分支同步到本地,我們需要建立一個新分支來承載它,通常命名和遠端分支的一致。對於以後拉取程式碼,直接git pull即可,就可以將遠端最新的feature-D分支上的程式碼拉取到本地。如果其中發生了衝突,那麼需要手動解決衝突並提交分支,在推送至遠端分支,始終保持遠端倉庫分支是最新的。
有時候我們從一個新的分支不能拉取程式碼下來,或者使用git branch -a命令不能獲取剛剛在遠端建立的新分支,那多半是因為本地快取的遠端分支列表沒有更新,這時候需要更新一下遠端分支列表:

git remote update origin --prune

其中origin是遠端倉庫的識別符號,如果你的遠端倉庫識別符號不是origin,需要改成自己的識別符號,通常預設都是origin

掌握了以上的比較常用的命令之後,基本上可以應付大多數工作了,至於在實際開發過程中,我們也許會很少用到命令,但是我個人認為,熟練使用命令將幫助你理解在IntelliJ IDEA中各種程式碼版本操作。以上基本上都是對git常見命令的介紹,並採用圖文的方式一步一步演示,希望對讀者有所幫助。接下來我將繼續出一篇結合IntelliJ IDEA來使用Git的文章,使用其圖形化介面來演示如何利用Git來高效地和同事合作開發,希望能幫助和我一樣的新人快速融入公司團隊中。

相關推薦

乾貨分享通過命令操作學習Git

Git是一個開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。Git是 Linus Torvalds為了幫助管理Linux核心開發而開發的一個開放原始碼的版本控制軟體。本篇文章將從原始的Git命令出發,學習實際開發過程中最常用、最

乾貨分享花坊類字型設計思路

今天帶給大家一波花坊類字型設計思路,希望可以幫打各位設計師小夥伴。 字型名稱:花兒花坊 行業:鮮花 創意思路:鮮花最能醉人,短暫的時光綻放自己最美的花樣,字型的視覺體現重點抓住美麗、自然、浪漫這幾個關鍵詞。 設計方法: 由於前幾篇都有詳細過程,此處就不再累贅重

乾貨分享用AI工具設計一款吸引人的字型效果

乾貨又來啦!今天教大家如何使用AI工具設計一款引人注目的字型效果,話不多說,我們直接開始! 1、在AI畫布中使用鋼筆工具勾勒出字母的線條,如圖所示 2、使用橢圓工具畫一個小的正圓,並填充藍色漸變。 3、我們再複製一個小圓,並填充紫色漸變,使用混合工具分別在

乾貨分享Google 的設計準則,素材和資源

  在谷歌,他們說, “專注於使用者,所有其它的就會水到渠成 ”。他們遵循設計原則,尋求建立讓使用者驚喜的使用者體驗。谷歌一直挑戰自己,為他們的使用者創造一種視覺語言,綜合優秀設計的經典原則和創新。谷歌設計規範是一份活的檔案,因為它們繼續更新最新的設計原則和細節。這是一份值得每位設計師收藏和學習的準則。 您

併發程式設計通過命令列獲取執行緒資訊

命令adb shell ps-t 檢視程序中執行緒的資訊-x 檢視utime和stime-P 檢視屬性-p 檢視排程策略,通常是檢視一個app處於前臺還是後臺-c 檢視哪一個CPU在執行這個程序name|pid 用名字或pid過濾例子(1) 檢視包名為com.eat的執行緒,

乾貨分享前端面試知識點錦集02(JavaScript篇)—— 附答案

1.  JavaScript是一門什麼樣的語言,它有哪些特點?參考答案 JavaScript是一種指令碼語言,官方名稱為ECMAScript(因定義語言的標準為ECMA-262)。JS的主要特點:a,語法類似於常見的高階語言,如C和Java; b,指令碼語言,不需要編譯就

乾貨分享大資料開發套件DataIDE使用教程

課程介紹 大資料開發套件(Data IDE) 是阿里雲數加重要的Paas平臺產品,是”DataWorks”中最重要的核心元件。提供全面託管的工作流服務,一站式開發管理的介面,幫助企業專注於資料價值的挖掘和探索。 大資料開發套件(Data IDE) 基於MaxCompute作

乾貨分享大話團隊的GIT分支策略進化史

  封面 作為一名85後的技術男,一轉眼10年過去了(一不小心暴露了年齡,雖然我叫18歲fantasy),親手寫程式碼已經是5年前了,目前主要負責公司的軟體產品的規劃和設計(所以最近寫的東西也主要與設計和產品分析有關)並帶著研發團隊進行產品落地。偶爾手癢癢寫點程式碼或者和團

乾貨分享C# 實體類生成工具

前言:   專案實戰中不論是業務編碼還是通用編碼,總會歸納出一些通用的工具類。放入專案中一勞永逸,讓兄弟姐妹們避免編寫重複程式碼。所以利用了工作之餘的時間,將這些散落在多個專案中精緻優雅的工具類,歸納起來形成工程,方便後續工作的使用和便捷開發。 根據實際需求,編寫了此工具。目前只支援SQLSer

Vivado 在工程模式下通過jou檔案學習 Tcl 命令

Xilinx 的資料手冊UG895提供了一些系統級設計的方法,寫得很詳細,詳細到得不到重要的訊息(我菜)。 Tcl命令在工程模式下以及非工程模式下有一些差異,具體什麼差異,這裡暫時不說,後面我想應該會有一篇博文專門講解。(我懂了的話會有,我相信會有。) 這裡尋求一種方法來學習Vivado

老鳥分享Linux命令行終端提示符多種實用技巧!

linux 技巧 系統管理員 1.Linux命令行提示符簡介眾所周知,Linux命令行是系統管理員管理Linux的重要手段,我們管理Linux,首先要面對的就是Linux命令行提示符。Linux命令行結尾的提示符有“#”和“$”兩種不同的符號,如下所示: [[email prot

VB.NET通過 IPIP.NET 數據庫查詢IP地址

exit utf try 付費 utf8 地址 .com href 使用方法 上一次介紹了利用純真數據庫查詢IP地址詳細信息的方法。然而純真數據庫是由網友反饋所提供的,很多數據描述並不準確,所以我上網找了一些其他的IP數據庫,最後就找到了 ipip.net 這個網站所提供的

經驗分享:壓縮PDF檔案操作方法

平常大家處理比較大的檔案的時候,不知道大家是如何進行操作的?在傳輸檔案的時候,有時就是因為檔案太大導致傳輸時間特別長,就拿PDF檔案來說,壓縮PDF檔案我們該如何進行操作呢?下面小編就將自己的方法分享給大家。   1:首先大家可以將需要壓縮的PDF檔案儲存在一個新建的

經驗分享PPT檔案轉換PDF格式操作方法

說到PPT檔案和PDF格式的檔案,應該都比較熟悉了吧!畢竟使我們辦公中常用所使用到的檔案格式。有時候在處理完PPT檔案的時候為了不讓別人隨意改動裡面的內容,就可以將PPT檔案轉成PDF格式,對於怎麼進行檔案轉換呢?可能部分人就會問到這樣一個問題,接下來小編可以將自己所知道的方法告訴大家! 1:在操作的電腦桌

經驗分享PPT文件轉換PDF格式操作方法

文件夾 打開 經驗分享 adf 文件轉換 color alt 能夠 進度 說到PPT文件和PDF格式的文件,應該都比較熟悉了吧!畢竟使我們辦公中常用所使用到的文件格式。有時候在處理完PPT文件的時候為了不讓別人隨意改動裏面的內容,就可以將PPT文件轉成PDF格式,對於怎麽進

騰訊Bugly乾貨分享Android程序保活招式大全

【騰訊Bugly乾貨分享】Android程序保活招式大全 本文來自於騰訊bugly開發者社群,非經作者同意,請勿轉載,原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:騰訊——張興華 目前市面上的應用,貌似除了微信和手Q都會

Bugly乾貨分享老司機教你 “飆” EventBus 3

EventBus對於Android開發老司機來說肯定不會陌生,它是一個基於觀察者模式的事件釋出/訂閱框架,開發者可以通過極少的程式碼去實現多個模組之間的通訊,而不需要以層層傳遞介面的形式去單獨構建通訊橋樑。從而降低因多重回調導致的模組間強耦合,同時避免產生大量內部類。它擁有使

騰訊Bugly乾貨分享移動網際網路測試到質量的轉變

Dev Club 是一個交流移動開發技術,結交朋友,擴充套件人脈的社群,成員都是經過稽核的移動開發工程師。每週都會舉行嘉賓分享,話題討論等活動。 本期,我們邀請了 TesterHome 測試技術社群聯合創始人“陳曄”,為大家分享《移動網際網路測試到質量的轉

資料分享500篇乾貨解讀人工智慧新時代

500篇乾貨解讀人工智慧新時代 本文主要目的是為了分享一些機器學習以及深度學習的資料供大家參考學習,整理了大約500份國內外優秀的材料文章,打破一些學習人工智慧領域沒頭緒同學的學習禁錮,希望看到文章的朋友能夠學到更多,此外:某些資料在中國訪問需要梯子,希望在一定程度上能夠幫助到大家,喜歡的朋友一定要點贊