Git安裝配置及經常使用命令
- 從官網下載安裝包,手動完成安裝。
- 打開
Git Bash
命令行工具,執行命令ssh-keygen -t rsa -C Email-Addresss
生成一個密鑰對。
- 登陸到GitLab,點擊右上角你的用戶頭像,點擊
Edit Profile settings
,點擊SSH Keys
,點擊Add SSH Key
,填寫Title
欄,複製用戶目錄下.ssh/id_rsa.pub
文件的內容到Key
,點擊Add Key
。
- 點擊右上角的
New project
,填寫完成後點擊Create project
新建一個倉庫,點擊Activity
,點擊SSH
後複製SSH
邊上欄裏的地址。
- 打開
Git Bash
命令行工具,切換到一個合適的目錄,使用命令git clone '剛纔複製的URL'
克隆建立的倉庫。
- 進入目錄
cd 倉庫名
,執行命令
git config --global user.email your-email
,設置你的郵箱
git config --global user.name your-name
,設置你的姓名。
- 執行命令:
echo "# Description" > README.md
,添加一個文件
git status
,查看當前狀態,發現有未跟蹤文件
git add .
,當前目錄全部文件添加到暫存區
git diff
,比較當前工做區和暫存區有何不一樣
git status
,查看當前狀態,發現有文件未提交
git commit -m "註釋"
,把暫存區內容提交到本地倉庫
git push -u origin master
,把本地倉庫的提交推送到遠程倉庫
git log
,查看提交日誌
- 模擬遠程更新
登陸到GitLab
,點擊Files
標籤,點擊README.md
文件,點擊Edit
按鈕修改文件內容,添加新行:」* 遠程修改文件記錄」,能夠點擊Preview
預覽,也能夠填寫註釋後直接保存。
- 執行命令:
git pull
,拉取遠程倉庫的更新提交,並作自動合併,可能會出現衝突
git fetch
,得到遠程倉庫的更新提交,不作自動合併,須要手動合併
git merge origin/master
,把遠程更新提交手動合併到本地master分支
- 配置命令別名
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使用時
- 其它命令
git clean -f
,清空未跟蹤文件
git checkout .
,清空工做區改動
git checkout some-branch-name file-name.js
,檢出指定分支的指定文件
git checkout {{some-commit-hash}} file-name.js
,檢出指定提交的指定文件
- 其它
- 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本地分支管理
- 分支的建立、合併、刪除、比較
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遠程分支管理
- 遠程分支的建立、合併、刪除
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標籤管理
- 標籤的建立、刪除
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
3. 切換到dev分支
git checkout dev
4. 基於dev分支建立本身的分支<分支名稱>
git checkout dev
git branch <分支名稱>
5. 切換到<分支名稱>,而後愉快的coding
git checkout <分支名稱>
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模式編寫 也不想象中的那麼簡單啊 …