1. 程式人生 > >Git 剖析,以及Git相關操作

Git 剖析,以及Git相關操作

本地庫 想要 暫存區 htm 圖形界面 初始化 git fetch windows 文件

Git的安裝: Windows上操作。

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

技術分享圖片

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

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

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

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

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

$ git config --global user.email "[email protected]"

3、查看配置信息

git config --list
Git config user.name
git config user.email

Git 工作區、暫存區和版本庫

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

工作區:就是你在電腦裏能看到的目錄。
暫存區:英文叫stage, 或index。一般存放在 ".git目錄下" 下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
下面這個圖展示了工作區、版本庫中的暫存區和版本庫之間的關系:

技術分享圖片

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

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

圖中的 objects 標識的區域為 Git 的對象庫,實際位於 ".git/objects" 目錄下,裏面包含了創建的各種對象及內容。

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

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

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

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

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

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

Git 工作流程

一般工作流程如下:

克隆 Git 資源作為工作目錄。
在克隆的資源上添加或修改文件。
如果其他人修改了,你可以更新資源。
在提交前查看修改。
提交修改。
在修改完成後,如果發現錯誤,可以撤回提交並再次修改並提交。
Git 的常用命令:

git clone
git remote
git fetch
git pull
git push

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

技術分享圖片

Git 創建倉庫

git init

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

在執行完成 git init 命令後,Git 倉庫會生成一個 .git 目錄,該目錄包含了資源的所有元數據,其他的項目目錄保持不變(不像 SVN 會在每個子目錄生成 .svn 目錄,Git 只在倉庫的根目錄生成 .git 目錄)。

使用方法

使用當前目錄作為Git倉庫,我們只需使它初始化。

git init
該命令執行完後會在當前目錄生成一個 .git 目錄。

使用我們指定目錄作為Git倉庫。

git init newrepo
初始化後,會在 newrepo 目錄下會出現一個名為 .git 的目錄,所有 Git 需要的數據和資源都存放在這個目錄中。

如果當前目錄下有幾個文件想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些文件進行跟蹤,然後提交:

$ git add *.c
$ git add README
$ git commit -m ‘初始化項目版本‘
以上命令將目錄下以 .c 結尾及 README 文件提交到倉庫中。

git clone

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

克隆倉庫的命令格式為:

git clone <repo>
如果我們需要克隆到指定的目錄,可以使用以下命令格式:

git clone <repo> <directory>
參數說明:

repo:Git 倉庫。
directory:本地目錄。
比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的命令:

$ git clone “地址”
執行該命令後,會在當前目錄下創建一個名為grit的目錄,其中包含一個 .git 的目錄,用於保存下載下來的所有版本記錄。

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

$ git clone "地址"

Clone 完之後我們操作

添加文件,添加文件包

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

新建完之後編輯

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

查看文件

$ ls -a 查看所有文件 ll 以一種怕列方式展示 git status 提交狀態 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 --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‘
  • 創建一個文件夾
  mkdir nodejs    //創建文件夾nodejs
  cd nodejs       //切換到nodejs目錄下
  • 初始化git倉庫

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

  • 創建忽略文件
  touch .gitignore    //不需要服務器端提交的內容可以寫到忽略文件裏
      /*
          .git
          .idea
      /*
  • 查看目錄
  ls -al
  • 創建文件並寫入內容
    //  如果文件不存在則會創建文件
    //  單個>箭頭表示寫入, >>表示追加
    echo "hello git"
    > index.html       //將‘hello git‘ 寫入到index.html中        
  • 查看文件內容
  cat index.html
  • 增加到暫存區中
  git add index.html
  git add -A      //全部添加到緩存區
  • 增加到版本庫(倉庫)中
  git commit -m ‘備註時間、次數、版本號等信息‘
  • 查看版本
  git log --oneline
  • 比較差異
技術分享圖片
  // 比較的是暫存區和工作區的差異
  git diff 

  //比較的是暫存區和歷史區的差異
  git diff --cached

  //比較的是歷史區和工作區的差異(修改)
  git diff master
技術分享圖片
  • 撤回內容
  //  如果修改了工作區的文件後發現改錯了
  //  可以用暫存區或者版本庫裏的文件替換掉工作區的文件
  //  用暫存區中的內容或者版本庫中的內容覆蓋掉工作區

  git checkout index.html
  • 取消增加到暫存區的內容(添加時)
    git reset HEAD index.html

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

  git status
  • 刪除本地文件
  rm fileName
  • 刪除暫存區
  // 保證當前工作區中沒有index.html
  // 使用--cached 表示只刪除緩存區中的內容
  git rm index.html --cached
  • 回滾版本
  回滾最近的一個版本 git log

  git reset --hard HEAD/commit_id
  • 回滾到未來
  git reflog
  • 創建分支
  git branch dev
  • 切換分支
  git checkout dev
  • 創建分支並切換分支
  git checkout -b dev
  • 刪除分支
  git branch -d dev
  • 在分支上提交新的版本
  git commit -a -m ‘dev1‘
  • 合並分支
  git merge dev
  • 分支的合並後顯示log
  git log --oneline --graph --decorate
  • 在分支開發的過程中遇到其他問題需要切換其他分支
  //  保留寫好的內容在切換到主幹
  //  保留內容

  git stash
  • 再次切換分支後,需要應用一下保留的內容
  git stash apply
  • 丟掉保存的內容
  git stash drop
  • 使用並丟掉
  git stash pop
  • 最佳分支
  //  有的時候開發需要合並指定的內容,而不是合並所有的提交
  // 所以我們需要挑選最好的,自己生產版本
  • 合並分支把樹杈掰到主幹上
  git rebase
  • 添加遠程的倉庫
  //  push -u
  //  -u參數 upstream

  git push origin master -u   //獲取最新代碼
  • 連接遠程倉庫
  git remote add origin 倉庫的地址
  • 查看遠程倉庫
  git remote -v
  • 刪除遠程倉庫
  git remote rm origin
  • git常用命令
技術分享圖片
//  安裝及配置:
Ubuntu下安裝:sudo apt-get install git 配置用戶名:git config --global user.name "你的名字" 配置e-mail:git config --global user.email "你的郵箱@xx.com" // 與添加有關的: 將當前目錄變為倉庫:git init 將文件添加到暫存區:git add 文件名 [可選:另一個文件名] 將暫存區提交到倉庫:git commit –m "描述" // 與查詢有關的: 查詢倉庫狀態:git status 比較文件差異(請在git add之前使用):git diff 文件名 查看倉庫歷史記錄(詳細):git log 查看倉庫歷史記錄(單行):git log --pretty=online 或 git log --online 查看所有版本的commit ID:git reflog // 與撤銷有關的: 撤銷工作區的修改:git checkout -- 文件名 撤銷暫存區的修改:git reset HEAD 文件名 回退到歷史版本:git reset --hard 該版本ID 回退到上個版本:git reset --hard HEAD^ 上上版本是HEAD^^,也可用HEAD~2表示,以此類推 // 與標簽有關的: 為當前版本打標簽:git tag 標簽名 為歷史版本打標簽:git tag 標簽名 該版本ID 指定標簽說明:git tag –a 標簽名 –m "標簽說明" [可選:版本ID] 查看所有標簽:git tag 查看某一標簽:git show 標簽名 刪除某一標簽:git tag –d 標簽名 // 與GitHub有關的: 先有本地庫,後有遠程庫,將本地庫push到遠程庫 關聯本地倉庫和GitHub庫:git remote add origin 網站上的倉庫地址 第一次將本地倉庫推送到GitHub上:git push –u origin master 先有遠程庫,後有本地庫,從遠程庫clone到本地庫 從遠程庫克隆到本地:git clone 網站上的倉庫地址

網站地址可以選擇HTTPS協議(https://github.com...)、SSH協議([email protected]...)。
如果選擇SSH協議,必須將Ubuntu的公鑰添加到GitHub上。見下一步

 SSH Key

 生成SSH Key:ssh-keygen –t rsa –C "你的郵箱@xx.com"
 生成Key時彈出選項,回車選擇默認即可。
 Key保存位置:/root/.ssh
登陸GitHub,創建new SSH key,其內容為/root/.ssh/id_rsa.pub中文本

已經有了本地庫和遠程庫,二者實現同步

本地庫的改動提交到遠程庫:git push origin master
更新本地庫至遠程庫的最新改動:git pull

Git 剖析,以及Git相關操作