Git操做梳理

參考教程:廖雪峯Git教程git

基本操做

建立基本庫

git init // 把這個目錄變成Git能夠管理的倉庫

添加並提交到當前分支

git add 文件名 // 添加到倉庫;若是不寫文件名寫.的話則爲增長全部改變的文件
git commit -m "註釋文字" // 提交到倉庫,且只會提交add到倉庫的變化
// commit就像一個快照:一旦你把文件改亂了,或者誤刪了文件,還能夠從最近的一個commit恢復,而後繼續工做,而不是把幾個月的工做成果所有丟失
add以後版本庫內部:

clipboard.png

commit以後版本庫內部

clipboard.png

查看當前狀態

git status // 主要能夠查看改動的文件有沒有add,有沒有commit

查看文件內容

cat 文件名

查看修改內容

git diff 文件名 // 查看文件在被添加(add)倉庫以前作了哪些改動,是工做區(work dict)和暫存區(stage)的比較
git diff --cached // 是暫存區(stage)和分支(master)的比較

刪除文件

git rm 文件名
git commit -m "remove" //確認刪除
// 刪除以後可用git checkout -- 文件名 恢復刪除文件

版本管理

查看版本提交日誌

git log // 只能看到在目前版本次以前的歷史版本,看不到目前版本以後的版本
git reflog // 看到全部版本的提交日誌
// 退出操做直接按q便可,或者 esc -> : -> q

版本回退

git reset --hard HEAD^ //回退到上一版本,HEAD表示當前版本,而後根據^數量判斷向上回退多少個版本
git reset --hard HEAD~100 //回退到100個版本以前,當數量比較多時,用~100表示100個^
git reset --hard 短版本號/長版本號前幾位 // 能夠經過查看版本提交日誌找到版本號
git reset HEAD 文件名 // 把暫存區的修改回退到工做區,即取消add操做;上面三種均可視爲取消commit操做(只要沒有push到遠程庫)

撤銷修改

git checkout -- 文件名 // .表示全部文件,讓這個文件回到最近一次git commit或git add時的狀態

分支管理

多人協做模式:

  1. 試圖正常push本身的修改
  2. 推送失敗,說明遠程分支比你的本地分支更新,須要先抓取分支
  3. 合併有衝突,則解決衝突並提交
  4. 再次正常push本身的修改

建立和切換分支

git checkout -b dev // 建立並切換到dev分支
// 注意建立分支的意思是在一個新的分支上有着和master/建立以前時的當前分支同樣的代碼
git branch dev // 建立dev分支
git checkout dev // 切換到dev分支

查看分支

git branch // 查看有哪些分支,當前分支前面有*標誌

合併分支

git merge dev // 合併dev分支到當前分支
git merge --no-ff -m "xxxxxx" dev // 禁用Fast forward模式

禁用Fast forward模式下的合併邏輯以下圖所示:
clipboard.pngapp

刪除分支

git branch -d dev // 刪除dev分支

解決衝突

衝突主要指的是發起合併的分支和被合併的分支都有增長並提交相應的內容,且二者大機率狀況下是沒法一致的,就會引起衝突。
發生衝突以後,Git會用<<<<<<,=======,>>>>>>>這樣的符號在發生衝突的文件中標記出實際衝突的內容。
根據標記內容對須要對雙方內容進行綜合考慮(通常是發起合併的分支)並提交的文件進行處理而後再正常add和commit便可
貼士:幹活都在分支上,只有發佈在master分支上fetch

臨時分支

git stash // 把如今保存可是沒有add commit的內容暫時封存起來
git checkout -b ano // 建立分支,沒有未add,commit的修改
git stash list // 能夠看到保存的工做內容
git stash apply stash@{0} // 恢復以前保存內容
git stash drop // 刪除已經恢復的保存內容
git stash pop // 恢復的同時把stash內容也刪了

推送分支

git push origin 分支名 // 若是是第一次推送須要 git push -u origin 分支名
// origin是遠程庫的默認名,可更改爲其餘的

抓取分支

git pull // 或者用下面的2步操做來代替
git fetch origin master 
git merge origin/master

遠程與本地的同步

// 遠程有分支而本地沒有
git pull // 或者用另外一種抓取方法
git checkout -b 拉取的分支名 origin/拉取的分支名
// 本地有而遠程沒有
git push origin 分支名 // push到遠程會自動建立
相關文章
相關標籤/搜索