關於git你平常工做中會用到的一些東西

前言

git是一個版本控制工具, 版本控制主要的好處有三點:node

  1. 從當前版本回退到任意版本git

  2. 查看歷史版本github

  3. 對比兩個版本差別數據庫

git

相關術語

repository  倉庫
branch      分支
summary     摘要
track       跟蹤
modify      修改
stage       暫存
commit      提交
push        推送
pull        拉取
clone       克隆
amend       修改
merge       合併
conflict    衝突
origin      源
upstream    上游
downstream  下游
verbose     詳情
reflog      參照日誌
複製代碼

git基礎

  1. modified: 已修改, 修改了項目但沒有提交到本地數據庫, 也就是沒有git addvim

  2. staged: 已暫存, 就是執行了git add,可是沒有git commitbash

  3. committed: 已提交, 保存在本地數據庫, 就是執行了git commit服務器

git基本工做流程

  • 寫代碼
  • 對修改的文件進行快照, 保存到暫存區域中
  • 提交代碼, 將暫存區域中的文件快照上傳到git中

基本配置

查看當前的git配置:ssh

git config --list
git config user.name
git config user.email

//經過git config -h瞭解更多的git配置查詢
複製代碼

修改當前配置(通常只須要配置一次, 可是若是換了電腦, 或者更換了系統咱們就須要重新配置):ide

//用戶名配置
git config --global user.name "xiaohuochai"

//郵箱配置
git config --global user.email "121631835@qq.com"
複製代碼

項目配置.gitignore

當咱們提交項目到git時, 有不少文件是不須要提交的, 好比node_modules, .vscode, .idea等等工具

這是咱們須要在項目的根目錄下新建.gitignore文件

node_modules/
/*/node_modules/ .idea .vscode 複製代碼

配置ssh

當咱們從github遠程服務器pullpush代碼時, 如何驗證提交和拉取的代碼是誰? 爲了不每次輸入用戶名, 密碼的麻煩, 咱們能夠經過配置ssh來解決。

查看本機的ssh:

//ssh通常存在.ssh中
//打開命令行
cd ~/.ssh           //進入對應目錄
ls                  //若是有能夠看到私鑰id_rsa文件和公鑰id_rsa.pub
cat id_rsa.pub 或者 vim id_rsa.pub      //查看文件內容
複製代碼

若是沒有, 咱們能夠經過下面命令生成

ssh-keygen
複製代碼

接下來, 咱們複製公鑰的內容,登陸github

在右上角頭像下拉settings -> SSH and GPG Keys中點擊 New SSH Key進行添加。

經過ssh -T git@github.com命令來驗證SSH是否配置成功。

git基本操做

  • 初始化新倉庫
git init
複製代碼
  • 查看文件狀態
git status
複製代碼
  • 文件跟蹤
git add xxx         //跟蹤某個文件
git add .           //批量跟蹤
複製代碼

文件是否add成功, 咱們能夠經過git status再檢查一次

  • 文件提交本地倉庫
git commit              //提交文件到本地倉庫
git commit -m 'xxx'     //xxx是你本次提交的信息說明
git commit -am 'xxx'    //將全部已跟蹤的文件暫存起來一併提交
複製代碼
  • 推送遠程倉庫
git push origin xxx
//你能夠經過-u指定一個默認的源, 這樣之後push就不用加origin
git push -u origin xxx
//之後就能夠
git push

複製代碼
  • 拉取遠程倉庫
git pull origin xxx
//能夠簡寫git pull, 若是提示no tracking information, 咱們能夠經過下面方法創建追蹤,後續就能夠直接git pull了
git branch --set-upstream branch-name origin/branch-name
複製代碼
  • 差別比較
git diff
複製代碼
  • 查看提交歷史
git log                 //按提交時間列出全部的更新,最近的更新排在最上面
git log --oneline       //查看簡要的歷史記錄
git reflog              //用來記錄每一次命令, 經常使用來輔助版本切換
複製代碼

一次正常的代碼提交流程

git pull
git add .
git commit -m 'xxx'
git push
複製代碼

git版本切換

有時候業務場景, 或者需求變動等各類因素, 須要咱們切換回以前的某個版本。

要進行版本切換, 咱們就得知道當前處於哪一個版本:

git log --oneline
複製代碼

帶有HEAD字樣的就是咱們當前所在版本, 經過git reset --hard id命令切換版本。 id能夠是:

- HEAD^ : 上個版本
- HEAD^^: 上上個版本
- HEAD~10: 上10個版本
複製代碼

當你切換回上某個版本以後, 經過git log你就看不到最新版本了,這時咱們就可使用git reflog了, 這個命令會按照以前通過的全部的commit路徑排列。

git分支管理

咱們通常開發都會從master分支分離出dev或者其餘開發分支, 用來開發, 這樣即便開發出現問題也不會影響主分支。

使用git branch xxx建立一個新的分支。

使用git checkout xxx切換到新的分支

branch, checkout經常使用命令:

git checkout -b xxx         //能夠快速新建並切換到新的分支

git branch -d xxx           //當分支合併到主分支, 這個分支就能夠經過-d刪除了

git branch -D xxx           //刪除那些沒有被合併的分支

git branch -a               //查看全部分支
複製代碼

分支合併

注意: 分支合併時, 你必定要保證你在要合併到這個分支的目標分支上

使用git merge xxx便可將xxx分支合併到你當前所在的分支。

正常的合併分支很簡單, 這樣就ok了, 可是分支合併, 若是在不一樣的分支修改了同一個文件的同一部分, 此時git是沒法判斷該使用哪一個分支的代碼的, 這樣就會產生衝突,雖然git進行了合併, 但並無提交, 須要咱們解決衝突, 從新提交。

咱們能夠經過git status查看是哪些文件發生了衝突,而後逐一解決, 當咱們把衝突的代碼按正確的代碼修復後, 須要從新git add, git commit, git push

操做遠程倉庫

clone遠程倉庫

經過git clone url來克隆遠程倉庫

好比:

//這個默認會在你拉取的路徑下新建一個blog-mason的文件夾
git clone https://github.com/MasonEast/blog-mason.git 

//若是你不想要文件夾blog-mason, 你能夠這樣, 在url後面,空格加新名字
git clone https://github.com/MasonEast/blog-mason.git newName

//若是你就想要在當前路徑下放項目文件, 不要那個外面的文件夾了, 能夠用.
git clone https://github.com/MasonEast/blog-mason.git .
複製代碼

查看遠程倉庫git remote

咱們克隆的倉庫經過git remote會看到一個叫origin的遠程庫, 這是git默認標識克隆的原始倉庫

經過git remote -vgit remote --verbose咱們能夠查看到更加詳細的信息,即對應的項目地址, 正常會有兩個, 但若是你沒有push權限的話就只能看到一個fetch的地址。

git remote -v

origin  git@github.com:MasonEast/blog-mason.git (fetch)
origin  git@github.com:MasonEast/blog-mason.git (push)
複製代碼

刪除遠程分支

git push origin :xxx
//也能夠
git push origin --delete xxx
複製代碼

刪除遠程倉庫

git remote rm xxx
複製代碼

重命名遠程倉庫

git remote rename oldName newName
複製代碼

關於誤操做

git主要用於版本控制, 協同開發, 誤操做能夠撤銷, 可是有的撤銷是不可逆的, 咱們必定要慎重對待, 否則可能致使部分代碼丟失。

修改最後一次提交

場景: 某次提交完後, 發現少提交了文件, 咱們須要撤銷剛纔的提交, 而後從新提交。

git add xxx             //添加少提交的文件到暫存區
git commit --amend      //往最後一次提交中追加少提交的文件, 此次提交不會產生記錄
複製代碼

移除本地倉庫的文件

場景: 咱們經過git commit將文件提交到本地倉庫後, 纔想起來把不想提交的文件加進去了。

git rm xxx  
複製代碼

移除暫存區的文件

場景: 有時候咱們習慣性git add ., 但有的文件咱們不該該提交, 這時要從暫存區中移除文件。

git reset HEAD xxx      //從暫存區中移除xxx文件
複製代碼

後話

上述只是平常工做可能會用到的基本操做,這裏作一個小小的整理, 還有不少git進階學習的命令尚未提到, 好比git stash, git rebase等, 主要是在下也沒徹底玩明白, 就很差在此說起了。

相關文章
相關標籤/搜索