git是一個版本控制工具, 版本控制主要的好處有三點:node
從當前版本回退到任意版本git
查看歷史版本github
對比兩個版本差別數據庫
repository 倉庫
branch 分支
summary 摘要
track 跟蹤
modify 修改
stage 暫存
commit 提交
push 推送
pull 拉取
clone 克隆
amend 修改
merge 合併
conflict 衝突
origin 源
upstream 上游
downstream 下游
verbose 詳情
reflog 參照日誌
複製代碼
modified: 已修改, 修改了項目但沒有提交到本地數據庫, 也就是沒有git add
vim
staged: 已暫存, 就是執行了git add
,可是沒有git commit
bash
committed: 已提交, 保存在本地數據庫, 就是執行了git commit
服務器
查看當前的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"
複製代碼
當咱們提交項目到git時, 有不少文件是不須要提交的, 好比node_modules, .vscode, .idea
等等工具
這是咱們須要在項目的根目錄下新建.gitignore
文件
node_modules/
/*/node_modules/ .idea .vscode 複製代碼
當咱們從github遠程服務器pull
和push
代碼時, 如何驗證提交和拉取的代碼是誰? 爲了不每次輸入用戶名, 密碼的麻煩, 咱們能夠經過配置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 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 log --oneline
複製代碼
帶有HEAD
字樣的就是咱們當前所在版本, 經過git reset --hard id
命令切換版本。 id能夠是:
- HEAD^ : 上個版本
- HEAD^^: 上上個版本
- HEAD~10: 上10個版本
複製代碼
當你切換回上某個版本以後, 經過git log
你就看不到最新版本了,這時咱們就可使用git reflog
了, 這個命令會按照以前通過的全部的commit
路徑排列。
咱們通常開發都會從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
。
經過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
會看到一個叫origin的遠程庫, 這是git默認標識克隆的原始倉庫
經過git remote -v
或git 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
等, 主要是在下也沒徹底玩明白, 就很差在此說起了。