Git 使用心得

Git是如今最流行的版本管理工具, 其實學習的成本挺高的, 不少的入門的教程講的都很是的坑, 好比儘可能用的rebase代替pull, 當時我在想, 你說的我都懂, 可是具體應該怎麼作呢, 我看了很久終於搞懂了, 我但願的教程都把看的人當sb同樣來看, 該寫的命令, 一句不落, 而不是一筆帶過, 本文大概分爲如下幾部分git

Git軟件下載地址

Git

這是git的核心工具
官網: git-scm.com
下載: 在官網下載, 若官網不能訪問, 點擊這裏shell

SourceTree

是git的輔助工具, 相似的還有TortoiseGit, 固然我選擇SourceTree
官網: www.sourcetreeapp.combash

Git在項目中的流程

通常來講都是項目管理人員新建倉庫(通常都會新建兩個保護分支 主分支master和開發分支develop, 既然是保護分支對項目的其餘人員都是隻讀的, 甚至是不可見的) 而後推送到遠程倉庫, 項目的其餘人員, 從遠程倉庫clone, 項目參與人員根據任務的編號創建任務分支(任務分支通常都是以develop分支爲基礎創建, 咱們公司是以'#'+任務編號, 來肯定任務分支名稱, 如40號任務, 任務分支名稱就爲"#40"), 任務作好測試以後, 把分支推送到項目倉庫, 項目管理人員就把任務分支合併develop分支進行整合測試, 肯定沒有問題以後合併到master分支, 生產環境直接拉取master分支就好了
固然還有其餘的項目人員確定要和遠程倉庫同步了, 就是從新拉取遠程倉庫的內容, 以develop保證內容最新, 減小衝突服務器

Git經常使用的操做

上面的項目流程中,特殊標記的就是經常使用的操做
我工做中基本上就只用到這些, 這些仍是比較熟練的, 上面已經說明了使用的場景需求
遠程倉庫以osc(git.oschina.net/)爲遠程倉庫app

新建一個倉庫

在osc上面新建一個倉庫
圖片描述ssh

右鍵 > git bash工具

// 本身在本地新建倉庫
git init
// 新建項目的說明文件
echo "this is a demo" >> README.md
// 把說明文件添加並提交
git add README.md
git commit -m "first commit"
// 新建master,develop分支
git checkout -b master
git checkout -b develop
// 添加遠程的倉庫
git remote add origin https://git.oschina.net/xsu/demo.git
// 推送分支到遠程, 會彈出驗證框讓你輸入賬號和密碼
git push origin master
git push origin develop

圖片描述

項目開發人員: 從遠程倉庫克隆, 再操做學習

// 克隆, 須要輸入有權限的賬號和密碼
git clone https://git.oschina.net/xsu/demo.git
// 這步是查看clone下來的分支的, 能夠看到包含剛纔新建的master和develop分支
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master

// 新建任務是以origin/develop爲基準, 命令會新建並切換到任務(#40)
git checkout origin/develop -b "#40"
// 查看本地的分支, 當前分支是新建的分支
$ git branch
* #40
  master
// 就在任務分支上做業
// 添加修改的文件
git add <filename> / git add * 
// 提交修改, 提交是提交到本地
git commit -m "你的註釋"
// 而後推送到遠程
$ git push origin "#40"
Total 0 (delta 0), reused 0 (delta 0)
To https://git.oschina.net/xsu/demo.git
 * [new branch]      #40 -> #40

項目管理人員: 合併刪除剛纔推送上來的分支測試

//合併: rebase和merge均可以完成合並, 區別請參考progit, 合併的時候推薦不推薦用命令行, 使用gui工具更方便
git checkout develop
git rebase/merge origin/#40
git push origin develop
// 刪除, 這語法可能很是扯, 這tmd居然是刪除
$ git push origin :#40
To https://git.oschina.net/xsu/demo.git
 - [deleted]         #40

項目開發人員: 從遠程更新fetch

// 遠程把做業分支合併到develop分支以後, 本地須要更新
$ git fetch -p origin
From https://git.oschina.net/xsu/demo
 x [deleted]         (none)     -> origin/#40
// 手動刪除本身本地的分支
git branch -d "#40"

而後又是新建任務分支, 推送, 合併, 項目就這樣推動了
項目管理人員和項目開發均可以是同一我的, 上面的步驟就少了更新的步驟

Git經常使用的概念

參考progit

使用密鑰代替密碼

上面的操做中是須要輸入賬號密碼的, 這種方式很是的不方便, 其實能夠用密鑰代替

osc端

打開git bash

cd ~/.ssh
ssh-keygen -t rsa -C "999999@163.com"

圖片描述
在紅框處輸入你想取的名稱, 我輸入osc,
而後在個人電腦的地址欄中輸入 %userprofile%/.ssh
是否是看到了oscosc.pub兩個文件
打開osc.pub, 全選,複製到我的資料這裏
圖片描述

pc端

新建文件,取名爲config, 內容以下

# oschina
Host oschina
    HostName git.oschina.net
    User jaime
    IdentityFile ~/.ssh/osc

測試

我那裏的hostnam是oschine, 之後全部用到git.oschina.net的地方都改成oschina. https改成git
成功就是

$ ssh -T git@oschina
Welcome to Git@OSC, xsu!

失敗以下

$ ssh -T git@oschina
Permission denied.
// 添加遠程的倉庫
git remote add origin https://git.oschina.net:xsu/demo.git
修改成
git remote add origin git@oschina:xsu/demo.git

以前是clone的倉庫改成

git clone git@oschina:xsu/demo.git

若是已經克隆, 修改遠程倉庫地址爲

git remote remove origin
git remote add origin git@oschina:xsu/demo.git

固然這些的前提是 你要有這個倉庫的權限

若是TortoiseGit想使用密鑰的話, 必須右鍵 > TortoiseGit > settings
圖片描述
ssh.exe的地址爲 git的安裝目錄/usr/bin

工做中經常使用的命令

git init
git add <file>
git comit -m "<msggggg>"
git status
git log從最近到最遠的提交日誌, 
git log --pretty=oneline 顯示到一行
git reset版本回退
git reset --hard HEAD^ 回退到上一個版本,幾個^回退到上幾個版本 
git reset --hard 80fed6a 回退到hash開頭爲 80fed6a 的那個版本, 版本號不必寫全,前幾位就能夠, 不會保留更改
git reset --soft 80fed6a 回退到hash開頭爲 80fed6a 的那個版本, 可是保留更改
git diff查看修改的內容, 使用TortoiseGit來查看, 不要使用這個命令查看
git push origin <branch_name>
git fetch 獲取remote內容
git fetch -p origin 獲取的時候刪除已經刪除的分支
git rebase/merge <branch> 把<branch> 合併/基變 到當前分支, 請使用rebase替代merge
git branch <branch> 新建分支
git checkout <branch> 切換到分支
git checkout -b <branch> 新建而且切換到分支, 能夠代替上面2條命令

合併/基變 代碼

git rebase/merge <branch>
# 若是有衝突, 就須要
# 修改衝突, 而後
git add # 提交衝突
git rebase/merge --continue # 繼續執行基變或者合併, 直到合併完成或者
# 終止合併
git rebase/merge --abort

撤銷commit

# 在本地先回退更改
git reset --hard <版本號>
# 而後推到服務器
git push origin <branch> --force
# 若是不加force會報錯, 提示branch的本地的版本落後於遠端的版本

本文不是git的教程, git的基礎必定要看啊

相關文章
相關標籤/搜索