Git 簡單總結

Git的安裝: Windows上操作。


1、安裝安裝包地址:http://msysgit.github.io/

一路next,直接安裝上,完成安裝之后,就可以使用命令行的 git 工具(已經(jīng)自帶了 ssh 客戶端)了,另外還有一個圖形界面的 Git 項目管理工具。

在開始菜單里找到"Git"->"Git Bash",會彈出 Git 命令窗口,你可以在該窗口進行 Git 操作。

2、安裝完成之后一系列命令操作

一般公司申請賬戶,郵箱,相對用的注冊賬戶郵箱方式:

$ git config --global user.name "gongxiaozhu"

$ git config --global user.email "gongxiaozhu@qq.com"

3、查看配置信息

git config --list

Git config user.name

git config user.email

Git 工作區(qū)、暫存區(qū)和版本庫

我們先來理解下Git 工作區(qū)、暫存區(qū)和版本庫概念

工作區(qū):就是你在電腦里能看到的目錄。

暫存區(qū):英文叫stage, 或index。一般存放在 ".git目錄下" 下的index文件(.git/index)中,所以我們把暫存區(qū)有時也叫作索引(index)。

版本庫:工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū),而是Git的版本庫。

下面這個圖展示了工作區(qū)、版本庫中的暫存區(qū)和版本庫之間的關系:

圖中左側為工作區(qū),右側為版本庫。在版本庫中標記為 "index" 的區(qū)域是暫存區(qū)(stage, index),標記為 "master" 的是 master 分支所代表的目錄樹。

圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"游標"。所以圖示的命令中出現(xiàn) HEAD 的地方可以用 master 來替換。

圖中的 objects 標識的區(qū)域為 Git 的對象庫,實際位于 ".git/objects" 目錄下,里面包含了創(chuàng)建的各種對象及內(nèi)容。

當對工作區(qū)修改(或新增)的文件執(zhí)行 "git add" 命令時,暫存區(qū)的目錄樹被更新,同時工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區(qū)的文件索引中。

當執(zhí)行提交操作(git commit)時,暫存區(qū)的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區(qū)的目錄樹。

當執(zhí)行 "git reset HEAD" 命令時,暫存區(qū)的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響。

當執(zhí)行 "git rm --cached <file>" 命令時,會直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變。

當執(zhí)行 "git checkout ." 或者 "git checkout -- <file>" 命令時,會用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個操作很危險,會清除工作區(qū)中未添加到暫存區(qū)的改動。

當執(zhí)行 "git checkout HEAD ." 或者 "git checkout HEAD " 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個命令也是極具危險性的,因為不但會清除工作區(qū)中未提交的改動,也會清除暫存區(qū)中未提交的改動。

Git 工作流程


一般工作流程如下:

克隆 Git 資源作為工作目錄。

在克隆的資源上添加或修改文件。

如果其他人修改了,你可以更新資源。

在提交前查看修改。

提交修改。

在修改完成后,如果發(fā)現(xiàn)錯誤,可以撤回提交并再次修改并提交。

Git 的常用命令:

git clone、git remote、git fetch、git pull、git push

下圖展示了 Git 的工作流程:


Git 創(chuàng)建倉庫


git init

Git 使用?git init?命令來初始化一個 Git 倉庫,Git 的很多命令都需要在 Git 的倉庫中運行,所以?git init?是使用 Git 的第一個命令。

git init

該命令執(zhí)行完后會在當前目錄生成一個 .git 目錄。使用我們指定目錄作為Git倉庫。

git init newrepo

初始化后,會在 newrepo 目錄下會出現(xiàn)一個名為 .git 的目錄,所有 Git 需要的數(shù)據(jù)和資源都存放在這個目錄中。

$ git add? .

$ git add README

$ git commit -m '初始化項目版本'

以上命令將目錄下以 .c 結尾及 README 文件提交到倉庫中。

git clone

我們使用?git clone?從現(xiàn)有 Git 倉庫中拷貝項目(類似?svn checkout)。

克隆倉庫的命令格式為:

$ git clone “地址”

執(zhí)行該命令后,會在當前目錄下創(chuàng)建一個名為grit的目錄,其中包含一個 .git 的目錄,用于保存下載下來的所有版本記錄。

如果要自己定義要新建的項目目錄名稱,可以在上面的命令末尾指定新的名字:

$ git clone "地址"


Clone 完之后我們操作

?添加文件,添加文件包

$ git? touch? “文件名稱”, git? makdir 新建文件

新建完之后編輯

$ vi? “文件名”? ?$ : wq? 保存文件編輯

查看文件

$ ls? -a? ?查看所有文件? ?ll? 以一種怕列方式展示? git status? ?提交狀態(tài) git? diff 查看不同文件

添加文件、刪除文件

$? git? ?add ./? ?git? ?add? "文件名稱"? ?git? rm?

提交到緩存到本地文件

$ git? commit -m "說明"? ?git pull? ?git push


Git 分支管理

git branch -a? 查看遠程分支。

git? checkout (branch)? ?切換分支

git? merge? 合并分支


git? 整體流程


一般配置

  git --version? //查看git的版本信息

  git config --global user.name? //獲取當前登錄的用戶

  git config --global user.email? //獲取當前登錄用戶的郵箱

登錄git

/* 如果剛沒有獲取到用戶配置,則只能拉取代碼,不能修改? 要是使用git,你要告訴git是誰在使用*/   git config --global user.name 'userName'? ? //設置git賬戶,userName為你的git賬號,

git config --global user.email'email'

創(chuàng)建一個文件夾

  mkdir nodejs? ? //創(chuàng)建文件夾nodejs

  cd nodejs? ? ? //切換到nodejs目錄下

初始化git倉庫

  git init //在nodejs文件夾下初始化一個倉庫,此時文件里會到一個.git的隱藏文件夾

創(chuàng)建忽略文件

  touch .gitignore? ? //不需要服務器端提交的內(nèi)容可以寫到忽略文件里

  ? /*

?   ? ? ? .git

?   ? ? .idea

?    /*

查看目錄

  ls -al

創(chuàng)建文件并寫入內(nèi)容

? ? //? 如果文件不存在則會創(chuàng)建文件

? ? //? 單個>箭頭表示寫入, >>表示追加

? ? echo "hello git"

? ? > index.html? ? ? //將'hello git' 寫入到index.html中? ? ? ?

查看文件內(nèi)容

  cat index.html

增加到暫存區(qū)中

  git add index.html

  git add -A? ? ? //全部添加到緩存區(qū)

增加到版本庫(倉庫)中

  git commit -m '備注時間、次數(shù)、版本號等信息'

查看版本

  git log --oneline

  git diff

  //比較的是暫存區(qū)和歷史區(qū)的差異

  git diff --cached

  //比較的是歷史區(qū)和工作區(qū)的差異(修改)

  git diff master

撤回內(nèi)容

  //? 如果修改了工作區(qū)的文件后發(fā)現(xiàn)改錯了

  //? 可以用暫存區(qū)或者版本庫里的文件替換掉工作區(qū)的文件

  //? 用暫存區(qū)中的內(nèi)容或者版本庫中的內(nèi)容覆蓋掉工作區(qū)

  git checkout index.html

取消增加到暫存區(qū)的內(nèi)容(添加時)

git reset HEAD index.html

//顯示目錄的狀體 有沒有添加或者修改文件

git status

刪除本地文件

  rm fileName

刪除暫存區(qū)

// 保證當前工作區(qū)中沒有index.html  // 使用--cached 表示只刪除緩存區(qū)中的內(nèi)容

git rm index.html --cached

回滾版本

  回滾最近的一個版本 git log

  git reset --hard HEAD/commit_id

回滾到未來

  git reflog

創(chuàng)建分支

  git branch dev

切換分支

  git checkout dev

創(chuàng)建分支并切換分支

  git checkout -b dev

刪除分支

  git branch -d dev

在分支上提交新的版本

  git commit -a -m 'dev1'

合并分支

  git merge dev

分支的合并后顯示log

  git log --oneline --graph --decorate

在分支開發(fā)的過程中遇到其他問題需要切換其他分支

  //? 保留寫好的內(nèi)容在切換到主干

  //? 保留內(nèi)容

  git stash

再次切換分支后,需要應用一下保留的內(nèi)容

  git stash apply

丟掉保存的內(nèi)容

  git stash drop

使用并丟掉

  git stash pop

最佳分支

//? 有的時候開發(fā)需要合并指定的內(nèi)容,而不是合并所有的提交

//? 所以我們需要挑選最好的,自己生產(chǎn)版本

合并分支把樹杈掰到主干上

  git rebase

添加遠程的倉庫

  //? push -u

  //? -u參數(shù) upstream

  git push origin master -u? //獲取最新代碼

連接遠程倉庫

  git remote add origin 倉庫的地址

查看遠程倉庫

  git remote -v

刪除遠程倉庫

  git remote rm origin

如果選擇SSH協(xié)議,必須將Ubuntu的公鑰添加到GitHub上。見下一步

 SSH Key

生成SSH Key:ssh-keygen –t rsa –C "你的郵箱@xx.com"

生成Key時彈出選項,回車選擇默認即可。

Key保存位置:/root/.ssh

登陸GitHub,創(chuàng)建new SSH key,其內(nèi)容為/root/.ssh/id_rsa.pub中文本

?已經(jīng)有了本地庫和遠程庫,二者實現(xiàn)同步

本地庫的改動提交到遠程庫:git push origin master

更新本地庫至遠程庫的最新改動:git pull

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 16,210評論 5 147
  • 安裝Git Git的下載地址:Git官網(wǎng)下載地址 Git本地倉庫和命令 配置用戶 下載完Git后,右鍵會有一個Gi...
    TokyoZ閱讀 4,638評論 1 7
  • Git 命令行學習筆記 Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 4,155評論 0 11
  • 花美香氣撲鼻來 人們愛花美香 戀人們也愛花美香
    王密亮閱讀 236評論 0 0
  • 夏沫語打開門,桌子上的香奈兒包包敞開著,臥室的門敞開著,不時傳出嗯嗯呀呀的聲音。 ...
    小仙女Xin閱讀 301評論 1 1

友情鏈接更多精彩內(nèi)容