Git 學習之 Git Basics

最近在用git,但git學習曲線實在是有點高。
好在找到一個文檔  https://www.atlassian.com/git/tutorial/,如下就是學習筆記吧!
git init
git init  
在當前目錄初始化一個Git倉庫,包含一個 .git 目錄       .git 目錄就是Git版本庫 當前目錄爲工做區
git init <directory> 
在指定的目錄初始化一個Git倉庫, <directory> 下包含一個.git 目錄
git init --bare <directory> 
在指定目錄初始化一個版本庫, 僅包含".git"目錄(記錄版本歷史),不含項目源文件拷貝。

在使用Git初始化版本庫的時候,使用"git init"命令和使用"git init --bare"命令有什麼區別呢?html

       用"git init"初始化的版本庫(暫且稱之爲working repository)將會生成2類文件:「.git「版本庫目錄(記錄版本歷史)和實際項目文件的拷貝。你能夠把這類版本庫叫作「工做目錄」。工做目錄是一個包含有版本歷史目錄「.git"和源文件的目錄。你能夠在工做目錄修改你的源文件並使用"git add"和"git commit"命令進行版本管理。git

       用「git init --bare"初始化的版本庫(暫且稱之爲bare repository)僅包含".git"目錄(記錄版本歷史),不含項目源文件拷貝。若是你進入版本目錄,你會發現僅有".git"目錄,沒有其餘文件。版本庫僅包含記錄着版本歷史的文件。正則表達式

什麼狀況下使用「git init"和"git init --bare"呢?服務器

       working repository適合於實際編輯生產過程當中,在工做目錄下,你將會進行實際的編碼、文件管理操做和保存項目在本地工做。若是你開始建立一個項目將包含有源代碼和和版本跟蹤記錄的時候你可使用"git init".或者,若是你克隆"git clone"一個已經存在的版本庫的時候,你也能夠獲得一個working repository,它也將包含".git"目錄和源文件的拷貝。app

       bare repository主要是用做分享版本庫。開發者使用bare repository能夠向其餘人分享存儲在本地的版本庫,以便於實時分享代碼更新和團隊協做 。經過使用"git push"命令,你能夠將你的本地更新提交至「中心版本庫」(其餘開發者可訪問的中心庫)。其餘開發者可使用「git pull"命令者接受你提交的版本更新。若是你正在一個多人協做的項目團隊或者同一個項目須要在不一樣電腦上面完成的時候,bare repository能夠知足你的分佈式開發需求。編輯器

       總結:「工做目錄」是經過使用「git init「或「git clone」建立的本地項目拷貝。咱們能夠在工做目錄下面修改和測試代碼。經過測試後咱們可使用「git add「和」git commit「命令本地提交修改,而後使用「git push」命令向遠程 bare repository庫提交更新,一般bare repository指定其餘服務器,其餘開發者將能夠及時看到你的更新。當咱們想去更新本地工做目錄的時候,咱們可使用「git pull」命令去接受其餘開發者提交的更新。分佈式

 

git clone ide

git clone <repo>

克隆一個版本庫到本地學習

git clone <repo> <directory>

克隆一個版本庫到 <directory> 目錄測試

 

git config

git config user.name <name>
配置Git當前用戶的姓名
加 --global 參數表示這是全局變量,配置將會寫入 ~/.gitconfig
 git config --global user.name <name>
設置全局用戶名 
git config --global user.email <email>
設置全局郵箱 
git config --global alias.<alias-name> <git-command>
給命令設置別名 好比
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.up rebase
git config --global alias.ci commit
如今 git st == git status
        git co == git checkout
 
git config --global color.ui true
GIt 命令中開啓顏色顯示 
git config --global core.editor <editor>
設置git 使用的編輯器 好比 git commit 時會調用相應的編輯器 
git config --global --edit
打開全局配置文件
 
<repo>/.git/config 版本庫配置文件
~/.gitconfig   用戶全局配置文件
 
git add
git add <file>

將修改的這個文件添加到暫存區(包括修改刪除 和 新添加的文件)

git add <directory>

將修改的這個目錄添加到暫存區

git add -p

以交互的方式讓你選擇將要進行的操做 y 是提交修改到暫存區 n 是忽略 s splits it into smaller shunks e 編輯chunk q 退出

git add -u 

將修改添加到暫存區(包括修改刪除 但不包括新添加的文件)

git add -A

把全部的修改添加到暫存區 

git add -i

咱們能夠經過git add -i [<path>]命令查看<path>中被全部修改過或已刪除文件但沒有提交的文件,

並經過其revert子命令能夠查看<path>中全部untracted的文件,同時進入一個子命令系統。
好比:
 git add -i
           staged     unstaged path
  1:        +0/-0      nothing branch/t.txt
  2:        +0/-0      nothing branch/t2.txt
  3:    unchanged        +1/-0 readme.txt

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp

What now>
這裏的t.txtt2.txt表示已經被執行了git add,待提交。即已經添加到索引庫中。
readme.txt表示已經處於tracked下,它被修改了,可是尚未被執行了git add。即還沒添加到索引庫中。
 
revert子命令
能夠經過git add -irevert子命令(3: [r]evert)把已經添加到索引庫中的文件從索引庫中剔除。
3: [r]evert)表示經過3rrevert加回車執行該命令。執行該命令後,git會例出索引庫中的文件列表.
而後經過數字來選擇。輸入"1"表示git會例出索引庫中的文件列表中的第1個文件。
"1-15"表示git會例出索引庫中的文件列表中的第1個文件到第15個文件.回車將執行。
若是咱們不輸入任何東西,直接回車,將結束revert子命令,返回git add -i的主命令行。
update子命令
能夠經過update子命令2: [u]pdate)把已經tracked的文件添加到索引庫中。其操做和revert子命令相似。
add untracked子命令
經過add untracked子命令(
4: [a]dd untracked)能夠把還沒被git管理的文件添加到索引庫中。其操做和revert子命令相似。
diff子命令
能夠經過diff子命令(6: [d]iff)能夠比較索引庫中文件和原版本的差別。其操做和revert子命令相似。
status子命令
status子命令(1: [s]tatus)功能上和git add -i類似
quit子命令
quit子命令(7: [q]uit)用於退出git add -i命令系統
幫助
咱們能夠經過git add -h命令來看git add命令的幫助文檔。
 git add -h
usage: git add [options] [--] <filepattern>...

    -n, --dry-run         dry run
    -v, --verbose         be verbose

    -i, --interactive     interactive picking
    -p, --patch           select hunks interactively
    -e, --edit            edit current diff and apply
    -f, --force           allow adding otherwise ignored files
    -u, --update          update tracked files
    -N, --intent-to-add   record only the fact that the path will be added later
    -A, --all             add changes from all tracked and untracked files
    --refresh             don't add, only refresh the index
    --ignore-errors       just skip files which cannot be added because of errors
    --ignore-missing      check if - even missing - files are ignored in dry run
 
git commit
git commit 

提交修改到本地版本庫,只使用這個命令會打開一個編輯器讓你填入修改信息

git commit -m "<message>"

提交修改到版本庫

git commit -a

提交修改到本地版本庫,使用 -a 參數添加文件的修改到暫存區(省去 git add修改的文件的步驟)

  git status
git status

列出放入暫存區的,未放入暫存區的,和新建但沒add 的文件

 
 
git log
git log

顯示提交的修改

git log -n <limit>

顯示 limit 條修改信息

git log --oneline 

log 信息單行顯示

git log --stat

顯示log信息,包含文件修改(列出某次提交修改了哪些文件)

git log -p

顯示log信息,包含文件內容的修改(列出某次提交修改了哪些文件,並顯示內容的修改)

git log --author="<author>"

顯示log信息,按照提交者過濾

git log --grep="<pattern>"

顯示log信息,按照pattern(能夠是正則表達式) 過濾提交信息中包含pattern的提交

git log <since>..<until>

Show only commits that occur between <since> and <until>. Both arguments can be either a commit ID, a branch name, HEAD, or any other kind of revision reference.

git log <file>

只顯示包含<file>的提交

git log --graph  --oneline 

以圖形的形式顯示日誌提交結構

A few useful options to consider. The --graph flag that will draw a text based graph of the commits on the left hand side of the commit messages. --decorate adds the names of branches or tags of the commits that are shown. --oneline shows the commit information on a single line making it easier to browse through commits at-a-glance.
 
參考連接
  1. https://www.atlassian.com/git/tutorial/git-basics
  2. http://hubingforever.blog.163.com/blog/static/171040579201231110371044/
  3. http://hi.baidu.com/aatfjctoytaefkr/item/00c693450a5b36af60d7b93f
相關文章
相關標籤/搜索