原文連接: 本人博客園文章html
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'克隆建立的倉庫。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
按鈕修改文件內容,添加新行:」* 9 遠程修改文件記錄」,能夠點擊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等本教程還沒涉及,之後會逐步更新
複製代碼
分支的建立、合併、刪除、比較node
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的遠程管理相似遠程分支管理github
標籤的建立、刪除web
git tag t1
,從當前分支建立一個名爲t1的標籤git tag -m '註釋' t1
,建立一個帶有註釋的標籤git tag -d t1
,刪除名爲t1的標籤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分支的變動git show --no-merges master..
,功能同上git show some-branch:some-file.js
,查看其它分支的文件,無需切換分支git clone <倉庫地址>
複製代碼
git branch -a
# 查看是否有origin/dev分支,服務器默認已創建dev分支,若是沒有,則請Master角色先創建該分支:
# 方法1:clone版本哭,新建本地dev分支並push到服務器:git clone ; git branch dev ; git checkout dev ; git push。
# 方法2:直接在gilab上創建dev分支
複製代碼
git checkout dev #--- 多是git checkout -b dev origin/dev,創建進入分支,並關聯
複製代碼
git checkout dev
git branch <分支名稱>
複製代碼
git checkout <分支名稱>
複製代碼
git add ./
複製代碼
# 查看當前分支工做區是否有未跟蹤的文件(便是否有未添加到暫存區的文件)
git status
# 查看當前分支工做區的文件與暫存區文件的差別
git diff
複製代碼
git commit -m "說明"
複製代碼
也能夠不推送到服務器,只放在本地倉庫,例如僅本人使用的臨時分支vim
git push --set-upstream origin <分支名稱> #--- 設置關聯,也會順便推送,僅在第一次時用
git push origin
複製代碼
網頁上請求合併還能夠順便進行代碼審查,里程碑設置等 參考:gitlab
如何實現代碼評審機制(經過角色管理控制):www.jianshu.com/p/adb598c52…緩存
git pull
git checkout <分支名稱>
git merge --no-ff dev
複製代碼
若是有衝突,則參照上面的參考連接解決,或直接按【B. Master
角色直接本地合併】中的方法解決bash
dev
是保護分支,只有Master
角色(例,看設置的分支保護權限)纔有權限進行合併 將本地分支<分支名稱>合併到本地dev
分支,必須先從服務器pull
最新代碼,並切換到dev
分支,而後再合併:服務器
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
複製代碼
git checkout master
git branch -d <分支名稱>
複製代碼
git push origin :<分支名稱>
複製代碼
GitLib有五種身份權限,分別是:
Owner
項目全部者,擁有全部的操做權限Master
項目的管理者,除更改、刪除項目元信息外其它操做都可Developer
項目的開發人員,作一些開發工做,對受保護內容無權限Reporter
項目的報告者,只有項目的讀權限,能夠建立代碼片段Guest
項目的遊客,只能提交問題和評論內容具體參見GitLab權限,爲項目添加成員時可指定成員的身份權限。
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
分支svn: 只有一個版本的代碼
git: 整個倉庫的全部版本
svn: 不能夠, svn沒有自我版本控制的能力
git: 能夠的, git在本地就有一個倉庫, 本地的版本控制
svn: checkout/commit/update
git: clone/add/commit/push/pull
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
// 查看狀態(working dir)
(Index/Stage)
(HEAD)
git remote add origin url
//關聯本地倉庫與遠程倉庫(1次)git push origin master
//將本地倉庫的更新推送到遠程倉庫git pull origin master
//拉取遠程倉庫的更新到本地倉庫 注意: 自動合併
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
* 用戶A: 項目xxx
* 用戶B: 用戶A的下一級或朋友, 沒有權限直接向倉庫xxx push代碼
* B: 訪問xxx主頁, fork一個分支到B帳戶下
* B: clone=>修改代碼==>commit==>push
* B: pull request: 向A提交一個pull的請求
* A: 接收到消息, 查看/diff/merge
* AB: 能夠進行發信息交流
複製代碼
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^ : 回到上一個版本
複製代碼
在settings中配置關聯上git.exe
使用git命令初始化本地倉庫並與遠程倉庫關聯
經過version control視窗直接進行版本控制操做
複製代碼
安裝TortoiseGit
經過菜單進行git版本控制(不使用命令)
使用git SSH
利用TortoiseGit的PuTTY工具生成public Key, 並配置到github上
生成private key並保存爲一個ppk文件
經過遠程倉庫的ssh地址clone, 並指定本地的ppk文件
複製代碼
Git常規命令部分參考自:www.07net01.com/2015/04/827…
完結