Git教程 - Git 命令與操做

【注】本文譯自:https://www.edureka.co/blog/g...
  學習 Git 與使用該工具同樣容易。這個 Git 教程的目的就是要把這個難題從您的腦海中剔除。我相信,經過這個 Git 教程,您將瞭解到全部的概念。
  我但願您已經瞭解了 Git 的基本概念和術語,並在個人 Git 教程系列的第一個博客中瞭解了有關版本控制的全部知識。
  在本教程中,您將學習:git

  • Git 命令
  • Git 操做
  • 還有一些使用 Git 有效地管理項目的提示和技巧。

  在開始使用命令和操做以前,讓咱們首先理解 Git 的主要目的。
  Git 的目的是管理一個項目或一組隨着時間變化的文件。Git 將這些信息存儲在稱爲 Git 存儲庫的數據結構中。存儲庫是 Git 的核心。服務器

如何查看個人 GIT 存儲庫?

  明確地說,Git 存儲庫是存放全部項目文件和相關元數據的目錄。
  Git 經過從索引中建立樹形圖來記錄項目的當前狀態。它一般採用有向無環圖(DAG)的形式存在。
  如今您已經理解解了 Git 的目標,讓咱們繼續討論操做和命令。數據結構

如何學習 Git 命令?

  Git工做原理的基本概述:架構

  • 使用 git 託管工具(如 Bitbucket)建立「存儲庫」(項目)
  • 將存儲庫複製(或克隆)到本地計算機
  • 將文件添加到本地存儲庫並「提交」(保存)更改
  • 將更改「推送」到主分支
  • 使用 git 託管工具對文件進行更改並提交
  • 將更改「拉」到本地計算機
  • 建立一個「分支」(版本),進行更改,而後提交更改
  • 打開一個「拉取請求」。
  • 將您的分支「合併」到主分支

Git Shell 和 Git Bash 有什麼區別?

  Git Bash 和 Git Shell 是兩個不一樣的命令行程序,可以讓您與底層的 Gi t程序進行交互。Bash 是基於 Linux 的命令行,而 Shell 是本機 Windows 命令行。app

一些操做和命令

  Git中的一些基本操做有:編輯器

  1. Initialize (初始化)
  2. Add (添加)
  3. Commit (提交)
  4. Pull (拉取)
  5. Push (推送)

  一些高級的 Git 操做有:工具

  1. Branching (分支)
  2. Merging (合併)
  3. Rebasing (變基)

  首先讓我簡要介紹一下這些操做如何與 Git 存儲庫一塊兒使用。看看下面的Git架構:

  若是您已經理解了上面的圖,那很好,可是若是您不瞭解,則沒必要擔憂,我將在本教程中逐一解釋這些操做。讓咱們從基本的操做開始。
  您須要先在系統上安裝Git。若是您須要安裝方面的幫助,請單擊此處學習

Git Bash 的用途是什麼?

  本 Git Bash 教程重點介紹可在 Git Bash 上使用的命令和操做。spa

如何瀏覽 Git Bash?

  在 Windows 系統中安裝 Git 以後,只需打開要存儲全部項目文件的文件夾/目錄便可;右鍵單擊並選擇「Git Bash Here」。

  這將打開 Git Bash 終端,您能夠在其中輸入命令以執行各類 Git 操做。
  如今,下一個任務是初始化存儲庫。命令行

初始化(Initialize)

  爲此,咱們使用命令 git init。請參考下面的截圖。

  git init 建立一個空的 Git 存儲庫或從新初始化一個現有的存儲庫。它基本上會建立一個帶有子目錄和模板文件的 .git 目錄。在現有存儲庫中運行 git init 不會覆蓋已經存在的內容。它會選擇新添加的模板。
  如今個人存儲庫已初始化,如今讓我在目錄/存儲庫中建立一些文件。例如我建立了兩個文本文件,即 edureka1.txt 和 edureka2.txt。
  讓咱們使用 git status 命令查看這些文件是否在個人索引中。索引保存工做樹/目錄的內容的快照,該快照將做爲本地存儲庫中要進行的下一次更改的內容。

Git status

  git status 命令列出了全部準備好添加到本地存儲庫的已修改文件。
  讓咱們輸入命令,看看會發生什麼:

  這代表我有兩個文件還沒有添加到索引中。這意味着除非在索引中顯式添加了這些文件,不然沒法提交對這些文件的更改。

添加(Add)

  該命令使用在工做樹中找到的當前內容來更新索引,而後在臨時區域中準備下一次提交的內容。
  所以,在更改工做樹以後,而且在運行 commit 命令以前,必須使用 add 命令將全部新文件或已修改的文件添加到索引中。爲此,請使用如下命令:
git add <directory>

git add <file>
  讓我爲您演示 git add,以便您能夠更好地理解它。
  我還建立了兩個文件 edureka3.txt 和 edureka4.txt。讓咱們使用命令 git add -A 添加文件。此命令會將全部目錄中的文件添加到索引中,但還沒有在索引中更新。

  如今,新文件已添加到索引中,您能夠提交它們了。

提交(Commit)

  它指的是在給定時間記錄存儲庫的快照。提交的快照永遠不會改變,除非電焊工地完成。讓我用下圖來解釋一下 commit 是如何工做的:

  這裏,C1 是初始提交,即第一個更改的快照,從該更改建立另外一個名爲 C2 的快照。請注意,主節點指向最新的提交。
  如今,當我再次提交時,將建立另外一個快照C3,如今主快照指向C3,而不是C2。
  Git 的 目標是使提交儘量輕量。所以,它不會每次提交時都盲目複製整個目錄;它包括做爲一組更改的提交,或從一個版本的存儲庫到另外一個版本的「增量」。 簡單來講,它只複製在存儲庫中所作的更改。
  您可使用如下命令提交:
git commit
  這將提交暫存的快照,並將啓動文本編輯器,提示您輸入提交消息。
  或者您可使用:
git commit -m 「<message>」
  讓咱們嘗試一下。

  如您在上面看到的,git commit 命令已經提交了本地存儲庫中四個文件中的更改。
  如今,若是要一次提交工做目錄中全部更改的快照,則可使用如下命令:
git commit -a
  我在工做目錄 viz 中又建立了兩個文本文件。edureka5.txt 和 edureka6.txt,但它們還沒有添加到索引中。
  我正在使用命令添加 edureka 5.text:
git add edureka5.txt
  我已將 edureka5.txt 顯式添加到索引中,但沒有將 edureka6.txt 添加到索引中,並在先前的文件中進行了更改。我想一次提交目錄中的全部更改。請參考下面的快照。

  該命令將提交工做目錄中全部更改的快照,但僅包括對跟蹤文件的修改,即在歷史記錄中的某個時刻使用 git add 添加的文件。所以, edureka6.txt 還沒有提交,由於還沒有將其添加到索引中。可是會提交對存儲庫中全部先前文件的更改,即 edureka1.txt、edureka2.txt、edureka3.txt、edureka4.txt 和 edureka5.txt
  如今,我已經在本地存儲庫中完成了所需的提交。
  請注意,在影響對中央存儲庫的更改以前,應始終將更改從中央存儲庫拉到本地存儲庫,以更新在中央存儲庫中作出貢獻的全部協做者的工做。爲此,咱們將使用 pull 命令。

拉取(Pull)

  git pull 命令將更改從遠程存儲庫獲取到本地存儲庫。它合併了本地存儲庫中的上游更改,這是基於 Git 的協做中的常見任務。
  但首先,您須要使用如下命令將中央存儲庫設置爲原始存儲庫:
git remote add origin <中央存儲庫的連接>

  如今已經設置了原點,讓咱們使用 pull 從原點提取文件。 爲此,請使用命令:
git pull origin master
  此命令會將全部文件從遠程存儲庫的 master 分支複製到本地存儲庫。

  因爲個人本地存儲庫已經使用 master 分支中的文件進行了更新,所以該消息已是最新的。請參閱上面的屏幕截圖。
注意: 也能夠嘗試使用如下命令從其餘分支提取文件:
git pull origin <branch-name>
  如今,您的本地 Git 存儲庫已使用全部最近的更改進行了更新。如今是時候使用 push 命令在中央存儲庫中進行更改了。

推送(Push)

  此命令將提交從本地存儲庫傳輸到遠程存儲庫。它與拉取操做相反。
  將導入提交到本地存儲庫,而將導出將提交到遠程存儲庫。
  git push 的用途是將本地更改發佈到中央存儲庫。積累了多個本地提交併準備與團隊其餘成員共享以後,可使用如下命令將其推送到中央存儲庫:
git push <遠程>
注:該遠程引用在使用 pull 命令以前設置的遠程存儲庫。
  這將把更改從本地存儲庫推送到遠程存儲庫,以及全部必要的提交和內部對象。並將在目標存儲庫中建立一個本地分支。
  我來爲您演示一下。

  上面的文件是咱們以前在 commit 部分中已經提交的文件,它們都是「push-ready」的。我將使用命令 git push origin master 來將這些文件反映在中央存儲庫的 master 分支中。

  如今讓咱們檢查這些更改是否發生在個人中央存儲庫中。

  是的,確實如此。 :-)
  爲了防止覆蓋,當Git在目標存儲庫中致使非快進合併時,它不容許推送。
注意: 非快進合併是指上游合併,即與子分支的祖先或父分支合併。
  要啓用這種合併,請使用如下命令:
git push <remote> –force
  上面的命令將強制執行推操做,即便它會致使非快進合併。
  到目前爲止,我但願您已經瞭解了 Git 的基本命令。如今,讓咱們進一步學習在 Git 中進行分支和合並。

分支(Branching)

  Git 中的分支只是指向特定提交的指針。Git一般更傾向於保持其分支儘量輕量級。
  基本上有兩種類型的分支,即本地分支遠程跟蹤分支
  本地分支只是您的工做樹的另外一條路徑。另外一方面,遠程跟蹤分支有特殊用途。 其中一些是:

  • 他們將您的工做從本地存儲庫連接到中央存儲庫上的工做。
  • 當您使用 git pull 時,它們會自動檢測要從哪一個遠程分支獲取更改。

  您可使用如下命令檢查當前分支是什麼:
git branch
  分支時您應該常常唸誦的口號是「早分支,常分支」。
  要建立一個新分支,咱們使用如下命令:
git branch <branch-name>

  上圖顯示了建立新分支時的工做流程。當咱們建立一個新分支時,它源自master分支自己。
  因爲建立多個分支沒有存儲/內存開銷,所以邏輯上劃分您的工做比擁有大塊的分支要容易得多。
  分支包括特定提交和全部父提交的工做。如您在上圖中所看到的,newBranch 已與主服務器分離,所以將建立一條不一樣的路徑。
  使用如下命令:
git checkout <branch_name> 而後執行
git commit
  如今,讓咱們看看如何使用提交分支。

  分支包括特定提交和全部父提交的工做。如您在上圖中所看到的,newBranch 已與主服務器分離,所以將建立一條不一樣的路徑。
  使用如下命令:
git checkout <branch_name> 而後執行
git commit

  在這裏,我建立了一個名爲「 EdurekaImages」的新分支,並使用命令 git checkout 切換到該新分支。
  上述命令的一種快捷方式是:
git checkout -b[ branch_name]
  此命令將建立一個新分支並同時簽出新分支。
  如今,當咱們在分支 EdurekaImages 中時,使用如下命令添加並提交文本文件 edureka6.txt:
git add edureka6.txt
git commit -m "adding edureka6.txt"

合併(Merging)

  合併是將不一樣分支的工做合併在一塊兒的方法。這將容許咱們進行分支,開發新功能,而後將其合併回來。

  上圖爲咱們展現了兩個不一樣的分支-> newBranch 和 master。如今,當咱們將 newBranch 的工做合併到master 中時,它將建立一個新提交,其中包含 master 和 newBranch 的全部工做。
  如今,讓咱們使用下面的命令合併兩個分支:
git merge <branch_name>
  上述命令中的分支名稱應該是你想要合併到當前所簽出分支的分支。所以,請確保您已在目標分支中檢出。
  如今,讓咱們將分支 EdurekaImages 的全部工做合併到 master 分支中。爲此,我將首先使用 git checkout master 命令檢出master分支,而後用 git merge EdurekaImages 命令合併 EdurekaImages。

  如上所示,分支名稱中的全部數據都合併到了master分支中。如今,文本文件 edureka6.txt 已添加到 master 分支中。
  在 Git 中合併會建立一個特殊的提交,該提交具備兩個惟一的父級。

變基(Rebasing)

  這也是組合不一樣分支之間的工做的一種方式。變基接受一組提交,將其複製並存儲在您的存儲庫外部。
  變基的優勢是它能夠用於製做線性的提交序列。若是完成了從新基準化,則提交日誌或存儲庫的歷史記錄將保持乾淨。
  讓咱們看看它是如何發生的:

  如今,咱們在 newBranch 上的工做緊隨 master 以後,咱們有了不錯的線性提交序列。
  注意: 從新設置基準還能夠防止上游合併,這意味着您不能將 master 放在newBranch以後。
  如今,要重設 master,請在 Git Bash 中鍵入如下命令:
git rebase master

  此命令會將咱們全部的工做從當前分支移至主節點。 它們看起來好像是順序開發的,可是倒是並行開發的。提示和技巧
  如今,您已經完成了本Git教程中的全部操做,這裏是您應該知道的一些提示和技巧。 :-)

歸檔存儲庫

  使用如下命令:
git archive master –format=zip –output= ../name-of-file.zip
  它將全部文件和數據存儲在一個 zip 文件中,而不是 .git 目錄中。
  請注意,這僅會建立一個快照,從而徹底忽略了版本控制。當您要將文件發送給未在計算機上安裝Git的客戶端進行審覈時,這很是方便。

綁定存儲庫

  它將存儲庫轉換爲單個文件。
  使用如下命令:
git bundle create ../repo.bundler master
  這會將 master 分支推送到一個遠程分支,該分支僅包含在文件中,而不是存儲庫中。
  另外一種方法是:
**cd..
git clone repo.bundle repo-copy -b master
cd repo-copy
git log
cd.. /my-git-repo**

隱藏未提交的更改

  當咱們要撤消臨時添加功能或任何種類的數據時,能夠臨時「隱藏」它們。
  使用如下命令:
**git status
git stash
git status**
  當您要從新應用「隱藏」的更改時,請使用如下命令:
git stash apply  我但願您喜歡這個 Git Bash 教程,並學習了 Git 中的命令和操做。

相關文章
相關標籤/搜索