Git 本地倉庫管理

目錄

 

 

基本概念

工做區(Working Directory): 就是你在電腦裏能看到的目錄
版本庫(Repository): 工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫。
暫存區 : Git 的版本庫裏存了不少東西,其中最重要的就是稱爲 stage(index)的暫存區html

配置

配置我的賬號信息

  • CLI 方式:
git config --global user.email "jmilkfan@example.com"
  git config --global user.name "jmilkfan"
  • Edit 方式:
    針對帳戶的配置: vim ~/.gitconfig
[user]        # User info                                                                                                         
|   email = jmilkfan@example.com
|   name = jmilkfan

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  editor = vim   # 默認編輯器

針對單個項目的配置: vim projectName/.git/configgit

|   repositoryformatversion = 0
|   filemode = true
|   bare = false
[remote "origin"]
|   url = http://fanguiju@192.168.1.1:8080/openstack/projectname
|   fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
|   remote = origin
|   merge = refs/heads/master
[remote "gerrit"]
|   url = ssh://fanguiju@192.168.1.1:8080/openstack/projectname.git
|   fetch = +refs/heads/*:refs/remotes/gerrit/*
安裝
sudo apt-get install git
# OR
yum install -y git
本地版本庫

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

建立 Git 倉庫

  • 建立工做目錄
mkdir jmilkfanDir
  • 將工做目錄變成 Git 工做區
cd jmilkfanDir
git init

生成 .git 目錄, 這個目錄纔是本質上的 Git 倉庫, 是 Git 來跟蹤管理版本庫的根本。vim

  • 在工做區建立文件, 並將文件添加到 Git 倉庫中, 讓 Git 倉庫可以記錄這個文件的當前狀態(內容)
    NOTE1 : 只能跟蹤文本文件的改動(txt/html/代碼文件),而無法跟蹤圖片、視頻、word文件這些二進制文件內容的變化
    NOTE2 : 建議全部文件都使用標準的 UTF-8 編碼
touch README.md

git status   # 查看當前工做區的狀態, 即工做區中有那些文件是和 Git 倉庫中記錄的內容不同的
# Or
git status -s   # 簡約的狀態查看方式

git add README.md   # 添加單個文件
# Or
git add .  # 添加全部文件

git diff   # 查看當前工做區中的文件內容與已往 Git 倉庫中記錄的內容有那些不一樣, 強烈建議在每一次執行 commit 以前都 diff 一次來確保能完成指望的提交

git commit -m "註釋, 便於記錄此次提交的內容主題"    # -m 只能提交單行註釋, 並不規範
# Or
git commit  # 進入 Vim 編輯模式, 能夠編輯規範的註釋

status 指令: 可讓咱們時刻掌握 Git 倉庫當前的狀態
add 指令: 本質上是將工做區中的文件記錄到 Git 倉庫的暫存區中, 並無真正寫入到 Git 倉庫
diff 指令: 看當前工做區中的文件內容與已往 Git 倉庫中記錄的內容有那些不一樣
commit 指令: 將暫存區的內容提交到 Git 倉庫中記錄. 因此, add 能夠指定多個文件, 最終由 commit 一次性寫入到 Git 倉庫.ruby

  • 刪除文件
git rm README.md
git commit -m "remove README.md"

刪除文件也會致使工做區和 Git 版本庫的不一致, 因此也須要提交操做, 來讓 Git 版本庫來記錄這一此的改變.
NOTE: 刪錯了, 也能夠很輕鬆地把誤刪的文件恢復到最新版本bash

git checkout -- README.md

Git 倉庫版本回退

Git 倉庫的版本被稱爲 commit, 一旦你把文件改亂了,或者誤刪了文件,還能夠回退最近的一個 commit.
經過 log 來查看 commit ID:ssh

git log    # 查看完整的 log 信息
# Or
git log --pretty=oneline  # # 查看簡潔的 log 信息

回退的步驟:編輯器

  • 首先,Git必須知道當前版本是哪一個版本,在Git中,用HEAD表示當前版本, 上一個版本就是HEAD^,上上一個版本就是HEAD^^,固然往上100個版本寫100個^比較容易數不過來,因此寫成HEAD~100ide

  • git reset 指令. EG:fetch

git reset --hard HEAD^
# Or
$ git reset --hard [commit ID]

NOTE: 回退 「回退」 的方法
只要上面的命令行窗口尚未被關掉,你就能夠順着往上找到那個但願回退 「回退」 的commit id
那麼忘記了 commit 怎麼辦 ? 還可使用 git reflog 指令

git reflog

修改管理

若是每次在工做區中對文件的修改,不 add 到暫存區,那就不會被提交到 commit 中.
因此當咱們 git add 了一個文件後, 發現還須要繼續對文件進行修改時, 先彆着急提交第一次修改,再次 git add 第二次修改以後 git commit,就至關於把兩次修改合併後一塊提交了.
第一次修改 ⇒ git add ⇒ 第二次修改 ⇒ git add ⇒ git commit

  • 撤銷修改
    咱們能夠經過 git checkout -- filename 手動的把 filename 文件中的修改撤銷掉.
    git checkout -- filename命令中的 很重要,沒有 ,就變成了「切換到另外一個分支」.

把 filename 文件在工做區的修改所有撤銷,這裏有兩種狀況:
1. filename 文件自修改後尚未被 add 到暫存區,如今執行 git checkout -- filename 就可以撤銷修改, 從而讓文件回到和版本庫中所記錄的同樣;
2. filename 已經 add 到了暫存區後,又對文件做了修改,如今執行撤銷修改的話, filename 文件就回到 add 到暫存區後的狀態(即仍會保留暫存區中的內容)。
NOTE: 針對第二種狀況, 咱們還能夠在 commit 以前, 用命令 git reset HEAD filename 把暫存區的內容進行撤銷,讓 filename 文件從新放回工做區的狀態. git reset命令既能夠回退版本,也能夠把暫存區的修改回退到工做區。

  • 使用技巧:
    場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令 git checkout -- filename
    場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,第一步用命令 git reset HEAD file,就回到了場景1,再git checkout -- filename .
    場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,git reset --hard [commit ID]
相關文章
相關標籤/搜索