Git版本管理薈萃

用慣了svn,忽然轉到git不免有點不適,寫個筆記好好備忘總結一番。html

 

1、先看歷史(imooc上的一個圖):git

2、git與svngithub

GIT跟SVN同樣有本身的集中式版本庫或服務器。但,GIT更傾向於被使用於分佈式模式,也就是每一個開發人員從中心版本庫/服務器上chect out代碼後會在本身的機器上克隆一個本身的版本庫。能夠這樣說,若是你被困在一個不能鏈接網絡的地方時,就像在飛機上,地下室,電梯裏等,你仍然可以提交文件,查看歷史版本記錄,建立項目分支,等。對一些人來講,這好像沒多大用處,但當你忽然遇到沒有網絡的環境時,這個將解決你的大麻煩。vim

3、那什麼狀況推薦使用svn緩存

SVN具備的悲觀鎖的功能,可以實現一個用戶在編輯時對文件進行鎖定,阻止多人同時編輯 一個文件。這一悲觀鎖的功能是 Git 所不具有的。對於以二進制文件 (Word文檔、PPT演示稿) 爲主的版本庫,爲避免多人同時編輯形成合並上的困難, 建議使用SVN作版本控制。bash

4、git工做原理服務器

這邊文章介紹的不錯 Git from the Bottom Up網絡

5、git安裝配置ssh

mac下實際無需安裝直接在命令窗口輸入git便可彈出安裝確認,這種方式安裝默認是安裝到/usr/bin目錄下,且不須要配置環境變量分佈式

另外一種方式就是手動安裝dmg包,須要配置環境變量

官網下載:http://git-scm.com/download/mac

vi ~/.bash_profile
export PATH="/usr/local/git/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:$PATH"
source ~/.bash_profile
重啓一下終端,檢查是否安裝成功
git version

用戶信息配置:

$ git config --global user.name "jager"
$ git config --global user.email jager@example.com

或 直接編輯配置文件:

vi ~/.gitconfig
 
[user]
name = jager
email = jager@example.com
[color]
ui = auto
branch = auto
diff = auto
status = auto
[color "branch"]
current = green
local = yellow
remote = red
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
[color "status"]
added = yellow
changed = green
untracked = cyan
[alias]
st = status
di = diff
ci = commit
co = checkout
br = branch

配置公私鑰:

== 生成git密鑰 ==
ssh-keygen -t rsa -C "jager@example.com"
祕鑰名稱填寫:git_rsa
其餘默認便可

== 配置git密鑰 ==
vim ~/.ssh/config
//增長如下內容,IdentityFile路徑爲你生成的git私鑰文件路徑
Host XXX
User git
IdentitiesOnly yes
IdentityFile /Users/你的用戶名/.ssh/git_rsa

== 配置公鑰 ==
拷貝公鑰 pbcopy < ~/.ssh/git_rsa.pub 
添加到git管理平臺 == FAQ ==
最後一步沒配置可能出現錯誤:
Permission denied (publickey).
fatal: Could not read from remote repository.

6、git經常使用命令

  •   workspace: 本地工做目錄
  •   index:緩存區域,臨時保存本地改動
  •   local repository: 本地倉庫
  •   remote repository:遠程倉庫

 

== git配置 ==
git config --list //查看當前git的配置,Git的設置文件爲.gitconfig,它能夠在用戶主目錄下(全局配置),也能夠在項目目錄下(項目配置)

== 查看信息 ==
git log //查看提交記錄
git status //查看修改狀態
git diff //查看詳細修改內容
git show //顯示某次提交的內容
git branch //列出全部本地分支
git tag //列出全部tag
git reflog //顯示當前分支的最近幾回提交

== 新建代碼庫 ==
git init //在當前目錄新建一個Git代碼庫
git init [project-name] //新建一個目錄,將其初始化爲Git代碼庫
git clone [url] //下載一個項目和它的整個代碼歷史

== 增長/刪除 ==
git add [file1] [file2] ... //添加指定文件到暫存區
git add [dir] //添加指定目錄到暫存區,包括子目錄
git add . //添加當前目錄的全部文件到暫存區
git rm [file1] [file2] ... //刪除工做區文件,而且將此次刪除放入暫存區
git mv [file-original] [file-renamed] //更名文件,而且將這個更名放入暫存區

== 代碼提交 ==
git commit -m [message] //代碼提交到本地倉庫
git commit [file1] [file2] ... -m [message] //提交指定文件到本地倉庫
git commit -a //提交工做區自上次commit以後的變化,直接到倉庫區
git commit -v //提交時顯示全部diff信息
git commit --amend -m [message] //使用一次新的commit,替代上一次提交,若是代碼沒有任何新變化,則用來改寫上一次commit的提交信息

== 分支管理 ==
git branch -r //列出全部遠程分支
git branch -a //列出全部本地分支和遠程分支
git branch [branch-name] //新建一個分支,但依然停留在當前分支
git checkout -b [branch] //新建一個分支,並切換到該分支
git checkout [branch-name] //切換到指定分支,並更新工做區
git checkout - //切換到上一個分支
git merge [branch] //合併指定分支到當前分支(如master)
git branch -d [branch-name] //刪除分支
git push origin --delete [branch-name] //刪除遠程分支
git branch -dr [remote/branch] //刪除遠程分支

== 遠程同步 ==
git fetch [remote] //下載遠程倉庫的全部變更,到index
git pull //更新本地倉庫至最新改動,到workspace
git remote -v //顯示全部遠程倉庫
git remote show [remote] //顯示某個遠程倉庫的信息
git remote add [shortname] [url] //增長一個新的遠程倉庫,並命名
git pull [remote] [branch] //取回遠程倉庫的變化,並與本地分支合併
git push origin master //推送至master分支
git push [remote] [branch] //上傳本地指定分支到遠程倉庫
git push [remote] --force //強行推送當前分支到遠程倉庫,即便有衝突
git push [remote] --all  //推送全部分支到遠程倉庫

== 撤銷 ==
git reset [file] //重置暫存區的指定文件,與上一次commit保持一致,但工做區不變
git reset --hard //重置暫存區與工做區,與上一次commit保持一致
git checkout //從index恢復到workspace
git checkout . //恢復暫存區的全部文件到工做區
git checkout -- files //文件從index恢復到workspace
git checkout HEAD -- files //文件從local repository複製到workspace

== 衝突解決 ==
git diff //對比workspace與index
git diff HEAD //對於workspace與最後一次commit
git diff <source_branch> <target_branch> //對比差別
git add <filename> //修改完衝突,須要add以標記合併成功

 

7、git使用流程規範【重要】

下面是ThoughtBot 的Git使用規範流程,推薦使用:

Create a local feature branch based off master.

git checkout master
git pull
git checkout -b <branch-name>

Rebase frequently to incorporate upstream changes.

git fetch origin
git rebase origin/master

Resolve conflicts. When feature is complete and tests pass, stage the changes.

git add --all

When you've staged the changes, commit them.

git status
git commit --verbose

Write a good commit message. Example format:

Present-tense summary under 50 characters

* More information about commit (under 72 characters).
* More information about commit (under 72 characters).

http://project.management-system.com/ticket/123

If you've created more than one commit, use git rebase interactively to squash them into cohesive commits with good messages:

git rebase -i origin/master

Share your branch.

git push origin <branch-name>

Submit a GitHub pull request.

Ask for a code review in the project's chat room.

 總結大體以下:

  •   新建分支
  •   提交分支
  •   撰寫commit信息
  •   與主幹同步
  •   合併commit
  •   推送到遠程倉庫
  •   發出pull request,請求別人進行代碼review

 

 

參考文檔:

中文官方文檔:https://git-scm.com/book/zh/v2

猴子都能懂的GIT入門

Git教程 - 廖雪峯

經常使用 Git 命令清單

Git經常使用命令

Git 使用規範流程

Git簡明指南(中文版)

Git多人協做

相關文章
相關標籤/搜索