Git 快速上手

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 前代碼改動的瀏覽和挑選)
  1. 命令行敲 git gui
  2. Windows Explorer,適當目錄下,右鍵菜單,Git GUI Here
  • Gitk (優點:顯示版本樹、歷史信息)
  1. 命令行敲 gitk --all &
  2. 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工做流

約定

flow.png

使用

  • 初始化: 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祕籍 》
相關文章
相關標籤/搜索