1、安裝 Git
2、設置 Git
生成密鑰
- 查看是否已經有了ssh密鑰:cd ~/.ssh
- 若是沒有密鑰則不會有此文件夾,有則備份刪除。
- ssh-keygen -t rsa -C "xxx@xxx.com"
上傳密鑰
- 以github爲例,依次點擊Setting->SSH and GPB keys->New SSH Key,複製粘貼生成的.pub文件中的祕鑰
- 而後就能夠用ssh協議,拉取推送代碼了
設置全局基礎配置
- git config --global user.name "xxx" // 請換成你本身的名字
- git config --global user.email "xxx@xx.com" // 請換成你本身的郵箱
- git config --global push.default simple // 要求 Git 版本 1.9.5 以上
- git config --global core.autocrlf false // 讓Git不要管Windows/Unix換行符轉換的事
- git config --global core.ignorecase false // windows設置大小寫敏感
3、基本工做流程
先附上
Git備忘清單
記着先pull再push,衝突都在本地解決
最後點贊收藏一條龍,硬核植入,哈哈
開始一個工做區
- init 建立一個空的 Git 倉庫或從新初始化一個已存在的倉庫
- clone 使用 SSH(推薦) 或 HTTP 協議,克隆倉庫到一個新目錄(推薦)
- git config --global credential.helper store // 記住git賬號密碼(http時避免每次提交都要輸入)
在當前變動上工做
- add 添加文件內容至索引
- mv 移動或重命名一個文件、目錄或符號連接
- restore 恢復工做區文件
- rm 從工做區和索引中刪除文件
檢查歷史和狀態
- bisect 經過二分查找定位引入 bug 的提交
- diff 顯示提交之間、提交和工做區之間等的差別
- grep 輸出和模式匹配的行
- log 顯示提交日誌
- show 顯示各類類型的對象
- status 顯示工做區狀態
擴展、標記和調校您的歷史記錄
- branch 列出、建立或刪除分支
- commit 記錄變動到倉庫
- merge 合併兩個或更多開發歷史
- rebase 在另外一個分支上從新應用提交
- reset 重置當前 HEAD 到指定狀態
- switch 切換分支
- tag 建立、列出、刪除或校驗一個 GPG 簽名的標籤對象
協同
- fetch 從另一個倉庫下載對象和引用
- pull 獲取並整合另外的倉庫或一個本地分支
- push 更新遠程引用和相關的對象
4、Git 工具
桌面工具
Git 官方的圖形化界面html
- Git GUI (優點:commit 前代碼改動的瀏覽和挑選)
- 命令行敲 git gui
- Windows Explorer,適當目錄下,右鍵菜單,Git GUI Here
- 命令行敲 gitk --all &
- Git GUI -> 菜單 -> 版本庫 -> 圖示全部分支的歷史
其餘備選git
- TortoiseGit (Windows)
- SourceTree (OS X 和 Windows)
Git flow工具
安裝
OS X
brew install git-flow
Linux
apt-get install git-flow
Windows
wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
5、Git flow工做流
約定

使用
- 初始化: git flow init
- 開始新Feature: git flow feature start MYFEATURE
- Publish一個Feature(也就是push到遠程): git flow feature publish MYFEATURE
- 獲取Publish的Feature: git flow feature pull origin MYFEATURE
- 完成一個Feature: git flow feature finish MYFEATURE
- 開始一個Release: git flow release start RELEASE [BASE]
- Publish一個Release: git flow release publish RELEASE
- 發佈Release: git flow release finish RELEASE
- 別忘了git push --tags
- 開始一個Hotfix: git flow hotfix start VERSION [BASENAME]
- 發佈一個Hotfix: git flow hotfix finish VERSION
6、常見問題
一、Git stash暫存修改
當咱們在開發項目的時候,忽然來一個變動須要修改,咱們除了將當前項目提交(commit)後切換(checkout) 到其餘分支外,咱們還能夠先將當前的修改暫存(stash)起來,而後再切換(checkout)到其餘分支,而不須要提交(commit),這樣就能夠減小一個 commit (雖然可使用 git commit --amend 來修改最後一次提交 )github
暫存修改windows
- git stash 或 git stash save "註釋" 來暫存修改,已經被 git 跟蹤,只是修改了代碼(而不是新增)文件
- 若是有新添加的文件,那麼就須要添加 -a 參數(如,git stash -a 或 git stash save -a "註釋"),或先 git add . 而後再使用 git stash 或 git stash save "註釋" 來暫存修改
取出修改bash
- git stash pop 取出最近的一個暫存,並從 stash list 中刪除該暫存記錄
- git stash apply stash@{id} 取出某個暫存記錄,但不會刪除記錄,stash@{id}裏面的id默認從0開始,最近的暫存爲0
暫存列表服務器
- git stash list 查看 stash 列表
- git stash drop stash@{id} 刪除某一個修改暫存
- git stash clear 清空全部的修改暫存
二、查看 Git日誌
git log
- 顯示全部提交過的版本信息
- 加上參數 --pretty=oneline,過濾顯示版本號和提交時的備註信息
git reflog
- 查看全部分支的全部操做記錄(包括已經被刪除的 commit 記錄和 reset 的操做)
自由穿梭 Git版本
- git reset --hard HEAD~1 退回到上一個版本
- 經過 git reflog 找到被刪除的commitid
- git reset --hard commitid 就能夠回到指定版本
三、git cherry-pick挑揀提交
獲取某一個分支的單筆提交,並做爲一個新的提交引入到你當前分支上。當咱們須要在本地合入其餘分支的提交時,若是咱們不想對整個分支進行合併,而是隻想將某一次提交合入到本地當前分支上,那麼就可使用git cherry-pickapp
- 一、首先,切換到develop分支,敲 git log 命令,查找須要合併的commit記錄,好比commitID:7fcb3defff;
- 二、而後,切換到master分支,使用 git cherry-pick 7fcb3defff 命令,就把該條commit記錄合併到了master分支,這只是在本地合併到了master分支;
- 三、最後,git push 提交到master遠程,至此,就把develop分支的這條commit所涉及的更改合併到了master分支。
經常使用options:
- --continue 繼續當前的chery-pick序列
- --quit 退出當前的chery-pick序列
- --abort 取消當前的chery-pick序列,恢復當前分支
- -n, --no-commit 不自動提交
- -e, --edit 編輯提交信息
四、tag 和 branch 的區別
- tag 對應某次 commit, 是一個點,是不可移動的。
- branch 對應一系列 commit,是不少點連成的一根線,有一個HEAD 指針,是能夠依靠 HEAD 指針移動的。
- 建立 tag 是基於本地分支的 commit,並且與分支的推送是兩回事,就是說分支已經推送到遠程了,可是你的 tag 並無,若是把 tag 推送到遠程分支上,須要另外執行 tag 的推送命令。
五、如何切換連接git服務器的方式是ssh仍是http
git remote set-url origin <要修改的url>
系統學習
《 Pro Git 》
《 Git Magic 》
《 GitHub祕籍 》