Git操做清單

Git是分佈式版本控制系統,那麼它就沒有中央服務器的,每一個人的電腦就是一個完整的版本庫,這樣,工做的時候就不須要聯網(能夠離線在本地提交,在聯網時push到相應的服務器或其餘用戶)了,由於版本都是在本身的電腦上。既然每一個人的電腦都有一個完整的版本庫,那多我的如何協做呢?好比說本身在電腦上改了文件A,其餘人也在電腦上改了文件A,這時,大家兩之間只需把各自的修改推送給對方,就能夠互相看到對方的修改了。html

1.前期準備

  1. 安裝git
  2. 配置git:
git config --global user.name "*********"
git config --global user.email "*********@gmail.com"
複製代碼

2.操做

// Bash基本操做命令

cd 改變目錄
cd ..  會退到上一級目錄
mkdir  新建一個目錄,一個文件夾
pwd  顯示當前目錄的路徑
ls(-la)  列出當前文件的全部文件
touch  新建一個文件(touch index.js)
rm 刪除一個文件
rm -r  刪除一個文件夾
mv  移動文件(mv index.html src)
clear  清屏
history  查看歷史的命令
help  幫助
exit  退出
複製代碼
1.git工做流程

git工做流程

git工做流程

2.git平常使用基本命令
  • workspace: 工做區
  • index/stage: 暫存區
  • repository/history:本地倉庫
  • remote repository:遠程倉庫

基本命令

1.建立版本庫

什麼是版本庫?版本庫又名倉庫,英文名repository,你能夠簡單的理解一個目錄,這個目錄裏面的全部文件均可以被Git管理起來,每一個文件的修改,刪除,Git都能跟蹤,以便任什麼時候刻均可以追蹤歷史,或者在未來某個時刻還能夠將文件」還原」。git

  1. 經過git init命令把當前目錄變成git能夠管理的repository。(全新的)
cd gitDemo   //切換目錄gitDemo

git init   //初始化目錄,目錄下會多了一個.git的目錄,
           //這個目錄是Git來跟蹤管理版本的
複製代碼
  1. 克隆遠程倉庫(clone)
#克隆一個項目和他的整個歷史版本
git clone [url]
複製代碼
2.git文件操做
  1. 版本控制就是對文件的版本控制,要對文件進行修改、提交等操做,首先要知道文件當前在什麼狀態,否則可能會提交了如今還不想提交的文件,或者要提交的文件沒提交上。文件共有4張狀態:Untracked;Unmodify;Modified;Staged。
  • Untracked(未跟蹤):此文件在文件夾中,但並無加入到git庫,經過git add狀態改變爲Staged。
  • Unmodify(未修改):文件已經入庫,版本庫中的文件快照內容與文件夾中徹底一致。若是文件修改狀態變成Modified,若是git rm移除,則狀態變成Untracked。
  • Modified(已修改):文件僅僅已經修改,可是沒有作其餘的操做。若是文件git add則狀態變成Staged;若是git checkout(從庫中取出文件覆蓋當前修改)丟棄修改,則變成Unmodify。
  • Staged(暫存):若是執行git commit,將文件提交到本地庫中,這是庫中的文件和本地文件一致,文件狀態變爲Unmodify;若是執行git reset HEAD filename取消暫存,文件狀態變爲Modifed。
  • 文件狀態
  1. 查看文件狀態
#查看指定文件狀態
git status [filename]

#查看全部文件狀態
git status
複製代碼
  1. 添加文件與目錄 Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD。
#添加指定文件到暫存區
git add [filename1][filename2]……

#添加指定目錄到暫存區,包括子目錄
git add [dir]

#添加當前目錄全部的文件到暫存區
git add .
複製代碼
  1. 移除文件與目錄(撤銷add)
    移除文件與目錄
#直接從暫存區移除文件
git rm --cached [file]   //工做區不做出改變
git rm [file]  //不但從暫存區中刪除,同時刪除物理文件

#若是已經經過add命令加入stage,就須要從stage中撤銷,工做區不受影響。
git reset HEAD [file]

#移除全部未跟蹤文件
#通常會加上-df,-d表示包含目錄,-f表示強制清除
git clean [options]
複製代碼
  1. 查看文件修改後的差別:git status能看到那些文件作出了修改,可是看不見具體的內容,則是使用git diff。
#查看文件修改後的差別
git diff [files]

#比較暫存區的文件和以前提交的文件
git diff --cached

#比較repo與工做空間中的文件差別
git diff HEAD
複製代碼

查看修改
6. 簽出:若是倉庫中已經存在文件f4.txt,在工做區中對f4修改了,若是想撤銷可使用checkout,簽出覆蓋檢出命令git checkout是git最經常使用的命令之一,同時也是一個很危險的命令,由於這條命令會重寫工做區。

$ git checkout branch
#檢出branch分支。要完成圖中的三個步驟,更新HEAD以指向branch分支,以及用branch 指向的樹更新暫存區和工做區。

$ git checkout
#彙總顯示工做區、暫存區與HEAD的差別。

$ git checkout HEAD
#同上

$ git checkout -- filename
#用暫存區中filename文件來覆蓋工做區中的filename文件。至關於取消自上次執行git add filename以來(若是執行過)的本地修改。

$ git checkout branch -- filename
#維持HEAD的指向不變。用branch所指向的提交中filename替換暫存區和工做區中相 應的文件。注意會將暫存區和工做區中的filename文件直接覆蓋。

$ git checkout -- . 或寫做 git checkout .
#注意git checkout 命令後的參數爲一個點(「.」)。這條命令最危險!會取消全部本地的 #修改(相對於暫存區)。至關於用暫存區的全部文件直接覆蓋本地文件,不給用戶任何確認的機會!

$ git checkout commit_id -- file_name
#若是不加commit_id,那麼git checkout -- file_name 表示恢復文件到本地版本庫中最新的狀態。
複製代碼
  1. 提交:經過add只是將文件或目錄添加到了index暫存區,使用commit能夠實現將暫存區的文件提交到本地倉庫。
# 提交暫存區到倉庫區
$ git commit -m [message]

# 提交暫存區的指定文件到倉庫區
$ git commit [file1] [file2] ... -m [message]

# 提交工做區自上次commit以後的變化,直接到倉庫區,跳過了add,對新文件無效
$ git commit -a

# 提交時顯示全部diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 若是代碼沒有任何新變化,則用來改寫上一次commit的提交信息
$ git commit --amend -m [message]

# 重作上一次commit,幷包括指定文件的新變化
$ git commit --amend [file1] [file2] ...
複製代碼
  1. 總結
    總結

3.分支

分支就是科幻電影裏面的平行宇宙,當你正在電腦前努力學習Git的時候,另外一個你正在另外一個平行宇宙裏努力學習SVN。安全

若是兩個平行宇宙互不干擾,那對如今的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合併了,結果,你既學會了Git又學會了SVN!bash

分支

1.經常使用命令
#列出全部的分支
git branch

#列出全部的遠程分支
git branch -r

#列出全部遠程分支和本地分支
git branch -a

#新建一個分支,並依舊停留在當前分支
git branch [branchName]

#新建一個分支,並切換到該分支
git checkout -b [branchName]

#切換分支,並更新工做區
git chechout [branchName]

#切換到上一個分支
git checkout -

#合併指定分支到當前分支
git merge [branchName]

#選擇一個commit,併合並進當前分支
git cherry-pick [commit]

#刪除分支
git branch -d [branchName]

#刪除遠程分支
git push origin --delete [branchName]
git branch -dr [remote/branch]

# 創建追蹤關係,在現有分支與指定的遠程分支之間
git branch --set-upstream [branch] [remote-branch]

# 新建一個分支,指向指定commit
git branch [branch] [commit]

# 新建一個分支,與指定的遠程分支創建追蹤關係
git branch --track [branch] [remote-branch]
複製代碼
2.衝突解決

若是同一個文件在合併分支時都被修改了則會引發衝突。解決的辦法是==咱們能夠修改衝突文件後從新提交==,請注意當前的狀態產master | MERGING。服務器

新建一個分支demo並切換到當前分支,而後修改文件index.js文件,並add,commit;而後切換到主分支master,並修改文件index.js,也add,commit。分佈式

1. 合併分支
git merge demo

2.發生衝突
CONFLICT (content): Merge conflict in index.js

3.查看衝突的文件
git status

4.手動修改文件後並提交
git add index.js

5.刪除demo分支
git branch -d demo
複製代碼
3.拉取提交代碼
  1. 若是是提交的話,直接git push
  2. 若是是拉取的話,就有兩種狀況:pull、fetch
git  pull     從遠程拉取最新版本 到本地  自動合併 merge            git pull origin master

git  fetch   從遠程獲取最新版本 到本地   不會自動合併 merge    git fetch  origin master       git log  -p master ../origin/master    
git merge orgin/master

實際使用中  使用git fetch 更安全    在merge以前能夠看清楚 更新狀況  再決定是否合併
複製代碼
相關文章
相關標籤/搜索