Git簡單教程
阿新 • • 發佈:2017-09-09
cif 切換 cap 版本回退 修改 master form email local
Git官方網站: https://git-scm.com/
簡單配置
如果想對項目進行版本控制, 需要將項目添加至git文件夾(或者子目錄)中, 然後執行以下命令.
該筆記總結廖雪峰Git教程, 參考網站: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
一. 簡介
Git采用分布式版本控制系統, 在此解釋分布式與集中式的區別. 集中式版本控制系統: 版本庫集中存放在中央服務器中, 工作時需要先請求最新版本, 工作結束後需向中央服務器提交最終版本. 分布式版本控制系統: 所有機器都有一份完整的版本庫, 所以其中一個機器損壞不會導致整個項目丟失.二. Git install
此處可以參考Git的官方網站, 其中Ubuntu下安裝git特別簡單, 僅需一條命令sudo apt-get install git. $ 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
# 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簡單教程