Git

  • 一套分散式版本控制系統,可無窮盡的開branch(分支),無論是在開發新功能、Debug都非常方便。
  • 基本語法(最前方需加git)
  • 建立初始容器(Repository)

init

建立初始容器(Repository)

status

查詢git目前狀態(是否有檔案更新或產生新檔案)

commit

執行剛剛的動作(addrm…etc)

Commit –m “xxx”,快速commit,不用進入編輯畫面

add

將檔案加入git

rm

將檔案移除追縱名單

  • 查詢Git內容

Show-branch –more=10

顯示最新的10個版本的內容

Git ls-files –stage

查詢檔案的SHA1

  • Git忽略不重要之檔案
    • 可將檔案名稱紀錄於 .gitignore檔中,如此對檔案修改時,git不會發現也不會加入未更新的追蹤名單。
    • 但如果該檔案已經加入Git,然後才將其寫入.gitignore檔,Git仍會持續追蹤。必需先進行刪除並commit,告知git這檔案不需在追蹤(避免檔案不見,需先備份)
  • 合併(merge)
    • 當程式需要進行Debug或增加新功能,Git可以建立出新的branch來處理,並於完成時再merge起來。

Git checkout branch

切換至不同的branch

Git merge otherBranch

將另一個branch與自己merge起來

  • 當合併時有兩個相同的檔案,且內容不同時,merge會產生衝突的現像。
  • 內容會切成兩塊:<<<<<<=====之間是自己branch的內容;=====>>>>>之間是另一個branch的內容。
  • 當發生衝突時,需要自行去編輯檔案,選擇需要的內容被把<<<<<=====的部份刪除。
  • merge後的如果反悔,也可以取消merge的結果

Git reset --hard HEAD

Merge後未commit前,可返回前一commit狀態

Git reset --hard ORIG_HEAD

Merge後已commit,可返回前一commit狀態

  • 返回上個版本 (reset)
    • 透過git每次commit的內容都會保存下來,可隨時切換回上一個版本的內容。
    • 除了返回版本外,也可以用來取消已經addmodifymixed的特定檔案內容,返回上一版本的狀態。
    • 返回時的HEAD也可以用HEAD^HEAD~2來返回前幾個版本的內容
    • 使用reset會有addmodifymixed的情況。
  1. Hard:代表返回後,該commit修改的內容將會完全移除
  2. Soft:代表返回後,該commit修改的內容會保存下來
  3. Mixed:原始設定,當不加hardsoft時就是此狀態,將內容返回至未add的狀態

Git reset HEAD fileName

將已經add的檔案取消掉

Git reset -- fileName

將修改過的檔案返回上一狀態的內容

  • 若我們建立了兩個branch,並建立兩個檔案,此時卻在mastergit reset –soft otherBranch。會產生以下情況

  • masterHEAD卻指向另一個branch,此時若下commit會發生模凌兩可的情況。
  • 直接用git reset –hard HEAD^ 也不能回到master的狀態,反而是回到otherBranch的前一個commit
  • 可以用git reflog來查詢所有的HEAD情況,並找出剛剛設定指向另一個branch的位置。
  • 重新下git reset –hard HEAD@{X}x表示第幾個head,重新回到未指錯的狀態。
  • 複製commit(cherry-pick)
    • 若現在有masterrel2_3兩個branch,而master發現一個bug並已經解決,但是在開發新功能的rel2_3branch也有相同問題,此時可以複製master已解決的commitrel2_3來。

Git checkout rel2_3
Git cherry-pick master~2//
找出修改後的commit並將其複製過來

  • 此作法會產生一個新的commitrel2_3branch中。
  • 也可以透過此方式將不同branchcommit全部複製到新的branch
  • 還原commit(revert)
    • reset的做法類似,但是回覆時是產生新的commit,而舊有的改變仍然可以保存。

Git revert HEAD

回覆先前的狀態(產生新的commit)

  • Resetrevertcheckout
    • Reset:用在返回某個commit的狀態
    • Revert:產生新的commit來進行回復,可保存先前修改之過程
    • Checkout:切換branch時可用
  • 修改最上層的commit內容
    • 可以修改最上層的commit注解,也可以修改裡面的內容。
    • 例如上一個commit修改了newFile內容,但是卻寫錯,可透過此方式修改上一個commitnewFile的修改。

Git add newFile
Git commit //
發現改錯
Vim newFile//改正
Git add newFile
Git commit –amend //
修改上一個commit內容,而非產生新的commit

 

文章標籤
全站熱搜
創作者介紹
創作者 y23462001 的頭像
y23462001

y23462001的部落格

y23462001 發表在 痞客邦 留言(0) 人氣(148)