Git經常使用命令及使用,GitLab/GitHub初探,Git/Svn區別



Git安裝配置及經常使用命令

  1. 官網下載安裝包,手動完成安裝。
  2. 打開Git Bash命令行工具,執行命令ssh-keygen -t rsa -C Email-Addresss生成一個密鑰對。
  3. 登陸到GitLab,點擊右上角你的用戶頭像,點擊Edit Profile settings,點擊SSH Keys,點擊Add SSH Key,填寫Title欄,複製用戶目錄下.ssh/id_rsa.pub文件的內容到Key,點擊Add Key
  4. 點擊右上角的New project,填寫完成後點擊Create project新建一個倉庫,點擊Activity,點擊SSH後複製SSH邊上欄裏的地址。
  5. 打開Git Bash命令行工具,切換到一個合適的目錄,使用命令git clone '剛纔複製的URL'克隆建立的倉庫。
  6. 進入目錄cd 倉庫名,執行命令
    git config --global user.email your-email,設置你的郵箱
    git config --global user.name your-name,設置你的姓名。
  7. 執行命令:
    echo "# Description" > README.md,添加一個文件
    git status,查看當前狀態,發現有未跟蹤文件
    git add .,當前目錄全部文件添加到暫存區
    git diff,比較當前工做區和暫存區有何不一樣
    git status,查看當前狀態,發現有文件未提交
    git commit -m "註釋",把暫存區內容提交到本地倉庫
    git push -u origin master,把本地倉庫的提交推送到遠程倉庫
    git log,查看提交日誌
  8. 模擬遠程更新
    登陸到GitLab,點擊Files標籤,點擊README.md文件,點擊Edit按鈕修改文件內容,添加新行:」* 遠程修改文件記錄」,能夠點擊Preview預覽,也能夠填寫註釋後直接保存。
  9. 執行命令:
    git pull,拉取遠程倉庫的更新提交,並作自動合併,可能會出現衝突
    git fetch,得到遠程倉庫的更新提交,不作自動合併,須要手動合併
    git merge origin/master,把遠程更新提交手動合併到本地master分支
  10. 配置命令別名
    git config --global alias.co checkout,配置檢出命令別名
    git config --global alias.br branch,配置分支命令別名
    git config --global alias.ci commit,配置提交命令別名
    git config --global alias.st status,配置當前狀態命令別名
    git config --global alias.df diff,配置比較命令別名
    git config --global alias.pl pull,配置拉取命令別名
    git config --global alias.pu push,配置推送命令別名
    git config --list,查看配置列表
    git config --global credential.helper store,配置記住密碼,以HTTPS使用時
  11. 其它命令
    git clean -f,清空未跟蹤文件
    git checkout .,清空工做區改動
    git checkout some-branch-name file-name.js,檢出指定分支的指定文件
    git checkout {{some-commit-hash}} file-name.js,檢出指定提交的指定文件
  12. 其它
  • Git管理大項目一段時間後會比較慢,可使用git gc命令清理一下
  • Git無論理空目錄,若是本地有空目錄,則始終不會提交到倉庫中
  • Git會根據文件的類似性自動識別重命令名操做,底層其實也是先delete後add
  • 可在.git同級目錄添加.gitignore文件,文件中可寫入忽略文件信息,查看狀態和提交時均會自動忽略
  • 1.7版好像支持了像svn那樣只檢出部分目錄的功能,詳細請移步官網文檔,另附Git稀疏檢出教程一例
  • 推薦官方書籍:Pro Git
  • 官方手冊地址請戳我,注:git help 'command'顯示的就是官方手冊Manual Page.
  • 還有一些其它功能,好比:rebase, rm, reset, remote, blame, cherry-pick, mergetool, difftool等本教程還沒涉及,之後會逐步更新

Git本地分支管理

  1. 分支的建立、合併、刪除、比較
    git branch,顯示全部分支
    git branch b1,從當前分支建立一個叫b1的分支
    git checkout b1,切換到b1分支
    git checkout -b b1,至關於以上兩條命令的組合
    git checkout master,切換到master主分支
    git merge b1,把b1分支的代碼合併到master上
    git branch -d b1,刪除b1分支,不能在被刪除分支上執行
    git diff branch-1 branch-2,比較兩個分支的不一樣
    git diff --name-only branch-1 branch-2,只顯示兩分支不一樣的文件的名稱
    git diff some-branch some-filename.js,比較當前分支與另外一分支指定文件

Git遠程分支管理

  1. 遠程分支的建立、合併、刪除
    git push origin dev,將本地分支dev推送到origin遠程倉庫
    git pull origin dev,拉取遠程倉庫origin的dev分支並自動合併
    git push orgin :dev,刪除遠程倉庫origin上的遠程分支
    git push origin --delete dev,1.7版以後可使用這個命令。
    git remote prune origin,清理本地的跟蹤分支,可加—dry-run參數假執行一下
    git pull --rebase,以變基的形式拉取更新

Tips : tag的遠程管理相似遠程分支管理html


Git Tag標籤管理

  1. 標籤的建立、刪除
    git tag t1,從當前分支建立一個名爲t1的標籤
    git tag -m '註釋' t1,建立一個帶有註釋的標籤
    git tag -d t1,刪除名爲t1的標籤

Git Log日誌

git log,查看歷史日誌
git log --graph,以基於文本的圖形顯示合併軌跡
git log --pretty=oneline,一行顯示日誌簡要信息
git log --pretty=format:"%h - %an, %ar : %s",以指定格式查看日誌,format參數請移步官方手冊
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges,以指定格式顯示指定日期區間和指定提交者的日誌,不含合併提交
git log -p -2 --stat,-p顯示文件差別,-2顯示最近兩次提交,—stat顯示修改行數統計信息
git log -p filename,查看文件的詳細變動,包括文件的實際修改內容
git log -L 1,1:some-file.txt,查看文件中指定位置的變動
git log --no-merges master..,查看還沒有合併到master分支的變動node


其它高級命令

git show --no-merges master..,功能同上
git show some-branch:some-file.js,查看其它分支的文件,無需切換分支git

常規使用及介紹

角色權限

角色 權限 備註
Owner 項目全部者,擁有全部的操做權限 最高權限
Master 項目的管理者,除更改、刪除項目元信息外其它操做都可 負責master等受保護分支的merge工做等
Developer 項目的開發人員,作一些開發工做,對受保護內容無權限 能夠建立遠程分支,建立merge請求, 接受merge請求?
Reporter 項目的報告者,只有項目的讀權限,能夠建立代碼片段 不能建立遠程分支, 建立merge請求?
Guest 項目的遊客,只能提交問題和評論內容 只能issue等

具體請看官方文檔:https://docs.gitlab.com/ee/user/permissions.htmlgithub


分支定義

分支名稱 定義 人員 環境 保護分支 穩定分支
master 主分支 頂級負責人Master 生產環境
r-預發佈版本號 預發佈分支 頂級負責人Master 預發佈環境
dev 開發分支 項目負責人Master 測試環境
b-BUG編號 Bug修復分支 開發者Developer 測試環境
f-特性名稱 特性分支 開發者Developer 開發環境
f-特性名稱-coder 特性分支-開發者 開發者Developer 開發環境
t-發佈版本號 發佈版本標籤 all all

通常使用方法

1. 克隆

git clone <倉庫地址>web

2. 查看全部分支

git branch -a
# 查看是否有origin/dev分支,服務器默認已創建dev分支,若是沒有,則請Master角色先創建該分支:
# 方法1:clone版本哭,新建本地dev分支並push到服務器:git clone ; git branch dev ; git checkout dev ; git push。
# 方法2:直接在gilab上創建dev分支

3. 切換到dev分支

git checkout dev    #--- 多是git checkout -b dev origin/dev,創建進入分支,並關聯

4. 基於dev分支建立本身的分支<分支名稱>

git checkout dev
git branch  <分支名稱>

5. 切換到<分支名稱>,而後愉快的coding

git checkout  <分支名稱>

yuan

6. 加到暫存區

git add ./

7. 可隨時檢查工做區狀態

# 查看當前分支工做區是否有未跟蹤的文件(便是否有未添加到暫存區的文件)
git status
# 查看當前分支工做區的文件與暫存區文件的差別
git diff

8. 提交到本地倉庫

git commit -m "說明"

9. 推送到服務器倉庫

也能夠不推送到服務器,只放在本地倉庫,例如僅本人使用的臨時分支vim

git push --set-upstream origin <分支名稱>     #--- 設置關聯,也會順便推送,僅在第一次時用
git push origin

10. 合併到dev分支(例)

A. Developer在網頁上請求合併(推薦)

網頁上請求合併還能夠順便進行代碼審查,里程碑設置等
參考:
gitlab如何實現代碼評審機制(經過角色管理控制): http://www.jianshu.com/p/adb598c52e84緩存


若是出現衝突,開發人員將服務器最新的版本pull下來,而後將dev分支合併到本身的分支bash

git pull
git checkout  <分支名稱>
git merge --no-ff  dev

若是有衝突,則參照上面的參考連接解決,或直接按【B. Master角色直接本地合併】中的方法解決服務器

B. Master角色直接本地合併

dev是保護分支,只有Master角色(例,看設置的分支保護權限)纔有權限進行合併
將本地分支<分支名稱>合併到本地dev分支,必須先從服務器pull最新代碼,並切換到dev分支,而後再合併:markdown

git pull  <倉庫地址>
git checkout dev
git merge --no-ff <分支名稱>

運行merge命令以後,若是有衝突,則須要手動解決衝突,打開衝突文件,你能夠看到相似:

。。。
111
<<<<<<< HEAD
222 master do it
=======
222 source do it
333 source jjj
>>>>>>> <分支名稱>
。。。

將正確的留下,錯誤的刪除便可,保存退出,而後從新(git add . ; git commit ; git merge ):

git add .
git commit -m "for merge說明"
git merge --no-ff <分支名稱>

衝突時,也能夠撤銷合併:

git merge --abort

11. 刪除分支,切換到master分支而後刪除<分支名稱>分支(不能刪除當前分支)

git checkout master
git branch -d <分支名稱>

12. 刪除遠程,危險,切記只刪除本身創建的分支,不要刪除公共分支,例如dev、release等

git push origin :<分支名稱>

GitLab介紹及常規使用

GitLib有五種身份權限,分別是:

  • Owner 項目全部者,擁有全部的操做權限
  • Master 項目的管理者,除更改、刪除項目元信息外其它操做都可
  • Developer 項目的開發人員,作一些開發工做,對受保護內容無權限
  • Reporter 項目的報告者,只有項目的讀權限,能夠建立代碼片段
  • Guest 項目的遊客,只能提交問題和評論內容

具體參見GitLab權限,爲項目添加成員時可指定成員的身份權限。


命名規則

  • 每次提交必須寫明註釋,若是是修復Bug,請加上Bug號
  • 建立特性分支,名稱要以f-開頭,加上特性名
  • 建立發佈分支,名稱要以r-開頭,加上預發佈版本號
  • 建立Bug修復分支,名稱要以b-開頭,加上Bug號
  • 建立標籤,名稱要以t-開頭,加上發佈版本號
  • 合併分支時必須使用--no-ff參數(禁止以快進方式合併),以保留合併歷史軌跡

主要分支(保護分支)

  • master 主分支,穩定代碼,爲生產環境作準備的
  • develop 開發分支,爲開發服務

特性分支

從develop分支建立,用於特性開發,完成後要合併回develop分支。
操做過程:
git checkout -b newfeature develop,從develop分支建立newfeature特性分支
git checkout develop,開發完成後,須要合併回develop分支,先切換到develop分支
git merge --no-ff newfeature,合併回develop分支,必須加--no-ff參數
git branch -d newfeature,刪除特性分支
git push origin develop,把合併後的develop分支推送到遠程倉庫


發佈分支

從develop分支建立,用於預發佈版本,容許小bug修復,完成後要合併回develop和master。
操做過程:
git checkou -b release-1.2 develop,建立一個發佈分支
git checkout master,切換到master分支,準備合併
git merge --no-ff release-1.2,把release-1.2分支合併到master分支
git tag 1.2,從master分支打一個標籤
git checkou develop,切換到develop分支,準備合併
git merge --no-ff release-1.2,把release-1.2分支合併到develop分支
git branch -d release-1.2,刪除這個發佈分支


修復分支

從master分支建立,用於生產環境上的Bug修復,完成後要合併回develop和master。
操做過程:
git checkout -b hotfix-1.2.1 master,從master分支建立一個Bug修復分支
git checkout master,切換到master分支,準備合併
git merge --no-ff hotfix-1.2.1,合併到master分支
git tag 1.2.1,爲master分支建立一個標籤
git checkout develop,切換到develop分支,準備合併
git merge --no-ff hotfix-1.2.1,合併到develop分支
git branch -d hotfix-1.2.1,刪除hotfix-1.2.1分支

區別git與svn

開發者的本地?

svn: 只有一個版本的代碼
git: 整個倉庫的全部版本

在沒有網絡的狀況下, 開發還能不能進行版本控制

svn: 不能夠, svn沒有自我版本控制的能力
git: 能夠的, git在本地就有一個倉庫, 本地的版本控制

最經常使用命令:

svn: checkout/commit/update
git: clone/add/commit/push/pull

git/github的經常使用操做

全局配置github用戶名和郵箱

git config --global user.name "用戶名"  //配置用戶名
git config --global user.email "你的郵箱"  //配置郵箱
git config --list  //查看配置列表

生成一個本地倉庫

git init  //初始一個本地建立
git clone url  //從遠程克隆倉庫到本地

添加文件並提交

git add *  //將工做區的變化添加到緩存區
git commit -m "說明信息"  //將緩存區的變化提交到版本區
git status  // 查看狀態

git在本地維護了3個區域

工做區(working dir)
緩存/暫存區(Index/Stage)     
版本區(HEAD)

push推送: 將本地倉庫中的更新提交到遠程倉庫

git remote add origin url  //關聯本地倉庫與遠程倉庫(1次)
git push origin master  //將本地倉庫的更新推送到遠程倉庫

pull拉取

git pull origin master  //拉取遠程倉庫的更新到本地倉庫
注意: 自動合併

git管理真實項目

1.添加忽略
    建立.gitignore文件
        vim .gitignore  //經過vim命令建立文件
        i  //進入編輯模式
        按esc  //進入查看模式
        ZZ  //保存並退出
    指定須要忽略的文件或文件夾
        /.idea  ##忽略當前目錄下的此文件(夾)
        node_modules  ## 忽略任意目錄下的此文件(夾)
2.本地版本控制
    git add *
    git commit -m "xxx"
3.建立github(遠程)倉庫
    New Repository
    VueSource
4.推送到遠程倉庫
    git remote add origin https://github.com/zxfjd3g/VueSource.git
    git push origin master

公司多人協同

new organization
查找小夥伴帳號, 並添加
修改組織成員的訪問權限爲: write
向小夥伴發送organization名稱/地址
小夥伴登錄後訪問organization的地址, 贊成協做請求
在組織下建立倉庫, 全部小夥伴均可以對倉庫進行clone/pull/push了

開源項目多人協同

用戶A: 項目xxx
用戶B: 用戶A的下一級或朋友, 沒有權限直接向倉庫xxx push代碼
B: 訪問xxx主頁, fork一個分支到B帳戶下
B: clone=>修改代碼==>commit==>push
B: pull request: 向A提交一個pull的請求
A: 接收到消息, 查看/diff/merge
AB: 能夠進行發信息交流

git/github其它操做

fetch拉取

git fetch origin master:tmp
git diff tmp   
git merge tmp : 將tmp分支合併到當前分支
須要手動合併後提交

其它的命令:

git log/reflog 
git checkout commit_id <file.name> : 將指定文件回到指定版本
git reset --hard HEAD  : 將整個工做區回到最新版本
git reset --hard HEAD^ : 回到上一個版本

在webstorm中使用git

在settings中配置關聯上git.exe
使用git命令初始化本地倉庫並與遠程倉庫關聯
經過version control視窗直接進行版本控制操做

使用TortoiseGit

安裝TortoiseGit
經過菜單進行git版本控制(不使用命令)
使用git SSH
    利用TortoiseGit的PuTTY工具生成public Key, 並配置到github上
    生成private key並保存爲一個ppk文件
    經過遠程倉庫的ssh地址clone, 並指定本地的ppk文件

Git常規命令參考自:http://www.07net01.com/2015/04/827369.html結合 haroopad 玩 markdown模式編寫 也不想象中的那麼簡單啊 …

相關文章
相關標籤/搜索