1. 程式人生 > >Git簡單教程

Git簡單教程

cif 切換 cap 版本回退 修改 master form email local

該筆記總結廖雪峰Git教程, 參考網站: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

一. 簡介

  Git采用分布式版本控制系統, 在此解釋分布式與集中式的區別.   集中式版本控制系統:   版本庫集中存放在中央服務器中, 工作時需要先請求最新版本, 工作結束後需向中央服務器提交最終版本. 分布式版本控制系統: 所有機器都有一份完整的版本庫, 所以其中一個機器損壞不會導致整個項目丟失.

二. Git install

此處可以參考Git的官方網站, 其中Ubuntu下安裝git特別簡單, 僅需一條命令sudo apt-get install git.
Git官方網站: https://git-scm.com/   簡單配置
 $ git config --global user.name "Your name"
 $ git config --global user.email "[email protected]"

三. 創建repository

 $ mkdir git     #創建git目錄
 $ cd git
 $ git init      #創建repository

   通過以下命令可以看到git目錄中有隱藏的.git文件
 $ ls -a

  把文件添加入repository

  如果想對項目進行版本控制, 需要將項目添加至git文件夾(或者子目錄)中, 然後執行以下命令.
 # Snapshots the file in preparation for versioning
 $ git add [file]

 # Records file snapshots permanently in version history
 $ git commit -m "[descriptive message]"

四. 版本控制

  一些簡單的命令:

 # Lists all new or modified files to be committed
 $ git status

 # Shows file differences not yet staged
 $ git diff

 # Lists version history for the current branch
 $ git log
 $ git log --pretty=oneline

  版本回退:

  Git必須知道當前版本是哪個版本, 在Git中, 用HEAD表示當前版本, 上一個版本就是HEAD^, 上上一個版本就是HEAD^^, 當然往上100個版本寫100個^比較容易數不過來, 所以寫成HEAD~100.
 $ git reset --hard HEAD^

  版本回退後, 新版本會消失, 如果想恢復至新版本必須知道新版本的ID號, 之前 git log 會打印出新版本的ID號.

 # 版本號沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能只寫前一兩位,因為Git可能會找到多個版本號,就無法確定是哪一個了。
 $ git reset --hard ID
  Git提供了一個命令 git reflog 用來記錄你的每一次命令, 可以通過這個命令查找ID號碼.

  Git概念理解:

  Work Directory: 之前創建的git文件夾就是一個工作區.   stage: 當使用 git add 命令後, 項目首先從工作區添加至緩沖區中. 使用 git commit 後將緩沖區內項目全部添加至 branch 中(git默認創建master分支), git commit 僅將stage內文件添加至branch中.   技術分享

  撤銷修改:

  當文件被修改後, 但是想撤銷, 此處分為兩種情況:   一: 文件依然存在與工作區中, 此處比較簡單, 僅需一條命令.
 $ git checkout -- fileName

  二: 文件已經 git add, 提交至stage中, 此時需要首先將文件從stage中撤回至work directory中, r然後成為一的情況.

 $ git reset HEAD fileName

  刪除文件:

  文件在目錄中刪除後, Git會在版本庫中依然保存該文件的信息, 因此如果想完全刪除需要使用如下命令:
 # Deletes the file from the working directory and stages the deletion
 $ git rm [file]

 $ git commit -m "message"

   如果誤刪想要回復文件, 使用如下命令:

 $ git checkout -- [file]

五. 遠程倉庫

  第1步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有 id_rsa 和 id_rsa.pub 這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell,創建SSH Key:
 $ ssh-keygen -t rsa -C "[email protected]"

  如果一切順利的話,可以在用戶主目錄裏找到.ssh目錄,裏面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

  第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面: 然後,點“Add SSH Key”,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容:   將本地庫推送至遠程庫中:
 $ git remote add origin [email protected]:***/***.git

  添加後,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。

  下一步,就可以把本地庫的所有內容推送到遠程庫上:
 $ git push -u origin master

  從現在起,只要本地作了提交,就可以通過命令, 把本地master分支的最新修改推送至GitHub:

 $ git push origin master

  第一次鏈接時會出現警告, 該警告關於SSH警告, 直接Yes即可.

  從遠程庫克隆:
 $ git clone [email protected]:***/***.git

分支管理

  簡單的命令:

 #表示創建並切換
 $ git checkout -b dev
 #or
 $ git branch dev
 $ git checkout dev

 # Lists all local branches in the current repository
 $ git branch

 # Switches to the specified branch and updates the working directory
 $ git checkout master

 # Combines the specified branch’s history into the current branch
 $ git merge dev

 # Deletes the specified branch
 $ git branch -d [branch-name]

 # 分支合並圖
 $ git log --graph

 # 禁用Fast forward模式, merge時生成新的commit
 $ git merge --no-ff -m "merge with no-ff" [branch-name]

 # Temporarily stores all modified tracked files
 $ git stash

 # Lists all stashed changesets
 $ git stash list

 # 強行刪除
 $ git branch -D feature-vulcan

 # 查看遠程庫的信息, 加-v會將信息詳細化
 $ git remote
  Fast-forward信息,Git告訴我們,這次合並是“快進模式”,也就是直接把master指向dev的當前提交(指向master的指針指向dev),所以合並速度非常快。但這種模式下,刪除分支後,會丟掉分支信息。   如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。   合並分支時,加上 --no-ff 參數就可以用普通模式合並,合並後的歷史有分支,能看出來曾經做過合並,而fast forward合並就看不出來曾經做過合並。      首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;每個人都在分支上幹活,每個人都有自己的分支,時不時地往分支上合並就可以了。      一是用 git stash apply 恢復,但是恢復後,stash內容並不刪除,你需要用git stash drop來刪除;   另一種方式是用 git stash pop ,恢復的同時把stash內容也刪了.   多人合作:   因此,多人協作的工作模式通常是這樣:   1) 首先,可以試圖用git push origin branch-name推送自己的修改;   2) 如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合並;   3) 如果合並有沖突,則解決沖突,並在本地提交;   4) 沒有沖突或者解決掉沖突後,再用git push origin branch-name推送就能成功!   5) 如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。   這就是多人協作的工作模式,一旦熟悉了,就非常簡單。

七. 標簽管理

  簡單命令:

 # 打一個新標簽, 加ID號可為以前的增加標簽
 $ git tag <name> [commit ID]

 # 查看標簽
 $ git tag

 # 查看標簽信息
 $ git show <tagname>

 # 刪除標簽
 $ git tag -d <tagname>

 # 推送某個標簽到遠程,使用命令
 $ git push origin <tagname>

 # 一次性推送全部尚未推送到遠程的本地標簽
 $ git push origin --tags

 #  刪除遠程標簽
 $ git tag -d <tagname>
 $ git push origin :refs/tags/<tagname>

轉載清註明出處, O(∩_∩)O謝謝!

Git簡單教程