手摸手帶你走近git

前言

  本文主要介紹git 密鑰生成與配置,基礎命令包括cloneaddcommitpullpush等,衝突處理,查看並回退歷史版本,以及提交規範等。git

密鑰生成與配置

  • 配置用戶名和郵箱
//打開git bash 輸入如下命令

//用戶名,填你的名字全稱 如:yaoxfly 方便識別
git config --global  user.name 'yaoxfly'
//郵箱,填你的經常使用郵箱,代碼出錯時會發郵件通知你
git config --global  user.email  '123@qq.com'
  • 生成私鑰和公鑰
ssh-keygen -t rsa 並按回車3下
tips:爲何按三下,是由於有提示你是否須要設置密碼,若是設置了每次使用git都會用到密碼,通常都是直接不寫爲空,直接回車就行了.
  • 私鑰和公鑰文件名和生成路徑

  私鑰:id_rsa,公鑰:id_rsa.pub
默認文件夾在你打開git bash的目錄,或者在你的用戶目錄~/.ssh文件夾下github

  • 配置

複製id_rsa.pub文件裏的全部內容粘貼到須要地方,好比github或碼雲的公鑰配置上npm

tips: 在生成 key以前 git config --global 姓名和郵箱必定要設置, 不然每次操做都要填寫用戶名和密碼,不要在祕鑰上設置密碼,直接下一步就好。

基礎

clone(克融項目)

git clone  'xxxx'

add(新增文件)

git add .  // 匹配全部的文件, 提交被修改的和新建的文件,但不包括被刪除的文件 
git add -u  // update tracked files  更新全部改變的文件,將修改的文件提交到暫存區。 
git add -A  // 是上面兩個功能的合集(git add --all的縮寫)

commit(提交)

  • 提交
git commit -m  "添加你的註釋,通常是一些更改信息"
  • 撤回提交
//僅僅是撤回commit操做,您寫的代碼仍然保留
git reset --soft HEAD^

push (遠程提交)

  • 提交
git push origin master:master
  • fatal: refusing to merge unrelated histories 拒絕合併不相關的歷史解決方式,強制提交
git push origin master:master -f
  • 提交簡寫
git push -u
tips:出現這個問題的最主要緣由仍是在於本地倉庫和遠程倉庫其實是獨立的兩個倉庫。

pull(拉新合併)

  • git pull

  命令基本上就是 git fetchgit merge 命令的組合體,git 從指定的遠程倉庫中抓取內容,而後立刻嘗試將其合併進你所在的分支中。緩存

  • git fetch [remote-name] (拉新)

  這個命令會訪問遠程倉庫,從中拉取全部你尚未的數據。 執行完成後,你將會擁有那個遠程倉庫中全部分支的引用,能夠隨時合併或查看。
可是注意的是 git fetch 並不會自動合併或修改你當前的工做。 你必須手動將其合併入你的工做。性能優化

  • git merge [remote-name] (合併)

  合併分支bash

  • 總結

  使用 git pull,命令來自動的抓取而後合併遠程分支到當前分支。(至關於一次執行fetch加merge命令)更簡單,更方便快捷,更溫馨的工做流程。ssh

branch(分支)

  • 建立新分支
git branch newBranch
  • 切換新分支
git checkout newBranch
  • 合併分支
git merge newBranch
  • 刪除分支
git branch -D newBranch
tips:合併分支前,必定要切換到想要合併的分支上,好比主分支,再執行分支合併操做

其餘命令

  • 查看提交歷史
git log
  • 查看當前狀態
git status
  • 緩存刪除
git rm -r --cached .
tips:應用場景,好比.gitignore忽略的文件無效的狀況等
  • 修改本地代碼關聯的遠程地址
git remote set-url origin ssh://git@ip:端口/home/git/gitrepo/git.git
tips:當代碼庫遠程遷移後,可以使用當前功能

獲取指定歷史版本源代碼

git clone http://XXXX/XX.git //克融項目
git log   // 查看commit歷史,並找到須要的版本
git checkout '版本號' //獲取
tips:運行 git log命令 ,查看commit後跟着的哈希值就是版本號

衝突解決

  • 版本分支的問題

      問題描述:提交git倉庫時出現:Your branch is up-to-date with 'origin/master'.ide

/*解決方案*/

//這時候咱們就須要新建一個分支
 git branch newBranch  
//檢查分支是否建立成功,前面的*表明的是當前你所在的工做分支
 git branch
//切換到你的新分支
 git checkout newBranch
//添加修改和新增的文件
 git add .
//提交到本地
 git commit -m "18.03.01"
//檢查是否成功
 git status
//而後切換到主分支
 git checkout master 
//將新分支提交的改動合併到主分支上(合併前必定要切換到主分支)
 git merge newBranch   
// push代碼了
 git push -u origin master
//刪除這個分支
 git branch -D newBranch
  • 衝突致使,文件亂碼

++<<<<<<< HEADgrunt

++<<<<<<< new_branch工具

  可直接刪除掉這些亂碼,保存後再提交,某些ide可提示,並可刪除這些亂碼等其餘智能操做,如vs code,編碼神器,個人最愛,哈哈,強推一波。

  • 提示:倉庫內還有未合併的文件,不能提交代碼.

   問題描述:committing is not possible because you have unmerged files

/*解決方案*/

//把你修改的文件一個個添加進去
git  add '文件名',
//提交本地
git commit -a -m  "備註信息" 
//提交遠程
git push -u

提交規範

  • 規範說明

git提交也有規範,業內作的比較好,具備參考價值的就是Angular的提交。

<type>(<scope>): <subject> #header
// 空一行
<body>
// 空一行
<footer>

//中文釋義
<類型>[可選的做用域]: <主題> 描述

[可選的正文]

[可選的腳註]
  • 主體參數
參數 說明 是否必須
type 提交類型 true
scope 提交影響的範圍 false
subject 提交目的的簡短描述 false
header 內容 true
  • type有如下標識

    • feat:增長新功能(feature)
    • fix : 修復bug
    • docs : 文檔改變 (documentation)
    • style : 代碼格式改變
    • refactor : 某個已有功能重構
    • build : 改變了build工具, 如
    • grunt換成了npm
    • revert: 撤銷上一次的 commit
    • perf : 性能優化
    • test : 增長測試
    • ci: 與CI(持續集成服務)有關的改動
    • chore:不修改src或者test的其他修改,例如構建過程或輔助工具的變更
    • del:刪除某個內容

tips:

  1. 若是type爲feat和fix,則該 commit 將確定出如今 Change log 之中。其餘特殊狀況(docs、chore、style、refactor、test)由你決定,要不要放入 Change log,建議是不要。
  2. 當一次改動包括主要type與特殊type時,統一採用主要type。
相關文章
相關標籤/搜索