產(chǎn)品前端架構(gòu)——版本管理 [網(wǎng)易前端筆記]

初始化開發(fā)環(huán)境


安裝git后需要做的第一件事情

git config --global user.name 'exmaple: Github Account'// 配置用戶名
git config --global user.email 'example: GitHub Email Address' //配置用戶email

用于某個項(xiàng)目的特殊配置, 將上面的--global參數(shù)替換為--local
要查看當(dāng)前的配置信息,輸入git config --list or git config --global --list

使用github

  1. 生成ssh key
# Step 1. 
在終端中輸入 ssh-keygen -t rsa -C "YOUR EMAIL"
一直按回車
# Step 2.
cd ~/.ssh
cat id_rsa.pub
拷貝其中內(nèi)容
  • 將上一步得到的內(nèi)容設(shè)置到github中

具體的查看Github上的內(nèi)容, 此處只做記錄
GitHub: guide to generating SSH keys

使用別名設(shè)置自定義log

命令格式:git config alias.shorename <fullcommand>

//Example. 配置格式化的log
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

更加簡化的log: git log --online

git 基本操作(常用命令)


查看git幫助文檔

git  help <command>
git <command> -h
git <command>  --help

git config 配置git

  1. 用戶配置
git config --global user.name "Demo User"
git config --global user.email "example@test.com"

這些配置會在提交中被展現(xiàn)


用戶配置信息在提交記錄中的展現(xiàn)

配置級別:

  • --local 【默認(rèn), 高優(yōu)先級】:只影響本倉庫.git/config
  • --global 【中優(yōu)先級】:影響所有當(dāng)前用戶的git倉庫~/.gitconfig
  • --system 【低優(yōu)先級】:影響到全系統(tǒng)的git倉庫,無論是哪一個用戶/etc/gitconfig

git init 初始化倉庫

git init [path]
git init [path] --bare

初始化后將會在被初始化的目錄下出現(xiàn)一個.git目錄, 結(jié)構(gòu)如下:

workdir
|__.git
   |——HEAD
   |——branches
   |——config
   |——description
   |——hooks
   |——info
   |——objects
   |__refs

git status

# git status 主要用于在下面3對關(guān)系之間找出他們的關(guān)系變化
- 未跟蹤    <——> 跟蹤
- 工作目錄  <——> 暫存區(qū)
- 暫存區(qū)    <——> 最新提交

對文件狀態(tài)的追蹤

內(nèi)容狀態(tài): 工作區(qū),暫存區(qū),提交區(qū)
文件跟蹤狀態(tài):已跟蹤,未跟蹤


內(nèi)容狀態(tài):工作目錄,暫存區(qū),提交區(qū)
  1. touch newFile, 將在工作目錄創(chuàng)建一個newFile的文件,此時(shí)文件處于未跟蹤狀態(tài)
  • git add newFile or git add .,文件被添加到暫存區(qū),同時(shí)文件被跟蹤

.gitignore 忽略文件

  • 在添加時(shí)忽略匹配文件
  • 僅作用于未追蹤文件
    相當(dāng)于在使用git add命令時(shí),將.gitignore文件中所列的文件類型都進(jìn)行了刪除
    .gitignore文件范列

.gitignore文件中用"#"來添加注釋
常見的.gitignore配置,可以參考:github/gitignore

git-rm 從暫存區(qū)刪除文件

git rm --cached // 僅從暫存區(qū)刪除

git diff 顯示不同版本之間的差異

  • 顯示工作目錄與暫存區(qū)之間的差異, 命令:git diff
  • 暫存區(qū)與某次提交差異, 默認(rèn)為HEAD,命令:git diff --cached [<reference>]
  • 工作目錄與某次提交的差異,命令:git diff <reference>
  • 兩次提交之間的差異, 命令: git diff <commitId1 commitId2>

撤銷修改

  1. 將文件內(nèi)容從暫存區(qū)復(fù)制到工作目錄,命令: git checkout --<file>

此操作會丟棄你的修改

  • 將文件內(nèi)容從上次提交復(fù)制到暫存區(qū),命令: git reset HEAD <file>
工作目錄,暫存區(qū)和提交區(qū)

git分支操作


分支的增刪查改 git branch

創(chuàng)建分支
git branch <branchName>
刪除分支
git branch -d <branchName>
查看所有分支信息
git branch -v

所有的分支信息都會存放在下面的文件中
cat .git/refs/heads/master

git checkout 通過移動HEAD檢出版本,可用于分支切換

git checkout <branchName> // 切換分支
git checkout -b <branchName> // 新建并切換到一個分支
git checkout -   // 恢復(fù)到上一個分支
git checkout <commit> // 切換到某次提交, head處于分離狀態(tài),此時(shí)避免做write操作

git reset 將當(dāng)前分支回退到歷史某個版本

git reset --mixed <commit> (默認(rèn)) // 會將當(dāng)前內(nèi)容復(fù)制到暫存區(qū)
git reset --soft <commit> // 會暫存區(qū)和工作目錄的狀態(tài),不會有任何變化
git reset --hard <commit> // 會將當(dāng)前內(nèi)容復(fù)制到暫存區(qū)和工作目錄

區(qū)別主要在于: 內(nèi)容是否會恢復(fù)到工作目錄或者暫存區(qū)

使用捷徑

  • A^ : A上的父提交
  • A~n: 在A之前的第n次提交

reset 與 checkout的區(qū)別(commit操作&file操作)

reset & checkout

命令 移動 范例(HEAD/branch) 說明
git reset 【commit】 git reset HEAD^ --soft 是/是 完全回退到某提交
git reset 【file】 git reset README.me 否/否 恢復(fù)暫存區(qū)到某提交狀態(tài)
git checkout 【commit】 git checkout master 是/否 移動當(dāng)前指針HEAD到某提交
git checkout 【file】 git checkout --README.md git checkout HEAD --xx.log 否/否 恢復(fù)工作目錄到某狀態(tài)

git stash

保存目前的工作目錄和暫存區(qū)狀態(tài)并返回到干凈的工作空間

使用場景: 其他分支有緊急任務(wù), 但當(dāng)前分支還存在未完成的工作(不能提交也不能放棄修改的情況下)

  1. 保存當(dāng)前工作目錄和暫存區(qū)的文件
git stash save 'push to stash area'
  • 查看暫存區(qū)內(nèi)容
git stash list
// stash@{0}: On master: push to stash area
  • 取回暫存區(qū)內(nèi)容到工作目錄
git stash apply stash@{0}
  • 丟棄暫存區(qū)對應(yīng)的stash
git stash drop stash@{0}
  • 取回暫存區(qū)棧頂一條內(nèi)容到工作目錄并丟棄暫存區(qū)棧頂內(nèi)容
git stash pop stash@{0}
// stash pop = stash apply + stash drop

分支合并 git merge

  1. 解決merge沖突
  • 不要使用fast-forward
    穿入?yún)?shù)--no-ff
eg: git merge next --no-ff
  • git rebase
    修剪提交歷史基線,俗稱“變基”
eg.  git rebase master // 將會進(jìn)行分支重演

如果只需要從某次提交修剪可使用以下命令:

git rebase --onto master commit


## git tag 對某個提交設(shè)置一個不變的別名

1. 為某次commit設(shè)置別名(tag)

git tag v1.0 commit
or
git tag -a 'v1.0' -m 'commit msg'
git push origin --tags


# git 遠(yuǎn)程操作

git 支持本地協(xié)議, 所以我們可以初始化一個本地的遠(yuǎn)程服務(wù)器

git init ~/git-server --bare

> bare 參數(shù)的意思是將當(dāng)前倉庫初始化為一個裸倉庫,裸倉庫沒有工作目錄
> 其文件結(jié)構(gòu)為:
git-server
  |— HEAD
|—branches
|— config
|— description
|— hooks
|— info
|— objects
|— refs

## git push 用于提交本地歷史到遠(yuǎn)程

## git remote 遠(yuǎn)程倉庫的相關(guān)配置
1. 配置遠(yuǎn)程映射

git remote add origin ~/git-server // 添加遠(yuǎn)程倉庫別名(origin 就是遠(yuǎn)程倉庫git-server的別名,信息會放在.git/config文件下)
git remote -v // 查看遠(yuǎn)程倉庫配置


## push 沖突
> 其他用戶先于你push時(shí), 會產(chǎn)生沖突

1. 使用git fetch+merge來解決這一問題

step 1

git fetch origin master

step 2

git merge origin/master

step 3

將這次提交推送到服務(wù)器

* 1中的3個步驟也可以使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容