git學習總結之tag、stash、回滾、撤銷

最新更新時間:2019年09月27日16:27:30

《猛戳-查看我的博客地圖-總有你意想不到的驚喜》

本文內容:git 不常用的相關命令:tag

概述

在日常開發過程中,使用git工具使用工具爲了提高開發效率,實施項目版本管理。

tag

  • 介紹

tag命令,給某一個commit做一個標記,tagName和commitID一一對應,因爲commitID不容易記憶,因此標籤可以當做是某個指定版本庫中指定的一個commit代碼的一個快照。
tag和分支平級,也就是說可以在任何分支和任何tag之間通過git checkout name命令來回切換。

  • 使用
  • 創建tag
    git tag tagName #在當前分支最近提交的的一次代碼上創建一個tag
    git tag tagName commitID #在當前分支指定的提交記上創建一個tag
    git tag -a tagName -m '這個tag的一些說明,可以是從哪個分支新建的tag,修改的內容和日期,以及版本號' commitID #在當前分支指定的提交記上創建一個tag
  • 提交到遠程服務器
    git push origin tagName #將本地指定tag推送到遠程服務器
    git push origin --tags #將本地全部tag推送到遠程服務器
  • 查看tag
    git tag
    git tag -l
    git tag -n
    git show tagName #查看tag詳細信息,ctrl+z 退出
  • 刪除本地tag
    git tag -d tagName #刪除本地tag
  • 刪除遠程倉庫tag的方案一
    git tag -d tagName
    git push origin :refs/tags/tagName
  • 刪除遠程倉庫tag的方案二
    git tag -d tagName
    git push origin --delete tagName
  • 從分支切換到tag
    git checkout tagName
  • 在指定tag上新建一個分支
    git checkout tagName
    git checkout -b new_branch_name
  • 說明
  • tag 是添加在refs/tags/
  • -a | --annotate #給tag添加註釋
  • -d | --delete #刪除本地tag
  • -f | --force #用新的tagName替換存在tag
  • -F | --file #從指定的文件獲取tag信息
  • -l | --list #列出所有tag
  • -m | --message #給tag添加信息
  • -n #打印全部tagName
  • -s | --sign #使用默認電子郵件地址的密鑰,給tag添加GPG簽名
  • -u | --local-user #使用指定的key(密鑰),給tag添加GPG簽名
  • -v | --verify #驗證GPG簽名

分支強制覆蓋

應用場景:從master分支切出子分支開發,再從子分支切出子分支開發,會遇到無法合併到master分支的場景,此時可以採用最新的子分支完全覆蓋master分支,保證了主分支的完整性。

具體操作如下:

  • git checkout master #切換到主分支
  • git reset --hard feature_branch_name #將feature_branch_name完全覆蓋master分支
  • git push -f #將最新master推送到遠程倉庫

代碼回滾與撤銷

應用場景:提交master分支併發布上線,發現有問題,需要回滾代碼到上一個版本,但發現又沒有問題,需要撤銷當前的回滾。

具體操作如下一:

  • git reset --hard HEAD^ #回滾代碼到上一個版本
  • git pull #恢復代碼到最新版本

具體操作如下二:

  • git reset --hard HEAD^ #回滾代碼到上一個版本
  • git reflog -5 #查看所有分支的所有操作記錄(包括已經被刪除的 commit 記錄和 reset 的操作)
  • git reset --hard commitId #恢復代碼到最新版本

代碼回滾並推向遠程

  • 步驟一:回滾
  • git reset --hard HEAD^ #回滾代碼到上一個版本
  • git reset --hard commitId #回滾代碼到指定版本
  • 步驟二:推送
  • git push -f

用戶名和密碼

git的用戶名是賬號,不是郵箱

  • 重置密碼

git config --global user.password"新密碼" 要求重新輸入賬號和密碼

  • 重置用戶名

git config --global user.name “新的用戶名”

  • 重置郵箱

git config --global user.email “新的郵箱”

  • 查看用戶名

git config user.name

  • 查看郵箱

git config user.email

  • lone權限不夠時,換一個新用戶,刪除老用戶信息
  • git config --system --unset credential.helper
  • git clone 此時需要重新輸入用戶信息

暫存代碼-stash

應用場景:當在A分支上開發項目,此時需要切換到B分支查看一些東西,但又不想提交A分支本地開發的代碼,此時暫存A分支的代碼即可。

  • git stash 暫存本地改動代碼
  • git stash save ‘info’ 添加暫存備註
  • git stash list 查看本地暫存代碼的列表
  • git stash show 查看暫存棧頂的單次記錄中改動了哪些文件
  • git stash show stash@{$num} 查看暫存棧中指定記錄中改動了哪些文件
  • git stash show -p 查看暫存棧頂的單次記錄中被改動文件的詳細內容
  • git stash show -p stash@{$num} 查看暫存棧中指定記錄中被改動文件的詳細內容
  • git stash apply 應用暫存棧頂的記錄,不刪除暫存棧的記錄
  • git stash apply stash@{$num} 應用暫存棧頂的指定記錄,不刪除暫存棧的記錄
  • git stash pop 應用暫存棧頂的記錄,刪除暫存棧的記錄
  • git stash pop stash@{$num} 應用暫存棧頂的指定記錄,刪除暫存棧的記錄
  • git stash drop 丟棄刪除暫存棧頂的記錄
  • git stash drop stash@{$num} 丟棄刪除暫存棧頂的指定記錄
  • git stash clear 清空刪除暫存棧

撤銷

  • 在沒有git add .之前撤銷本地代碼修改

git checkout – a.js #放棄某個文件的本地改動
git checkout . #放棄所有文件的本地改動

  • 撤銷git add .操作,同時不撤銷本地代碼修改

git reset HEAD a.js #撤銷某個文件
git reset HEAD . #撤銷所有文件

  • 撤銷git add .操作,撤銷git commit操作,同時不撤銷本地代碼修改

git reset HEAD^ #撤銷一次commit
git reset --mixed HEAD^ #–mixed 默認參數,可有可有

  • 撤銷git commit操作,不撤銷git add .操作,同時不撤銷本地代碼修改

git reset --soft HEAD^ #撤銷一次commit

  • 撤銷git add .操作,撤銷git commit操作,撤銷本地代碼修改

git reset --hard HEAD^ #撤銷一次commit
git reset --hard commitId #代碼回滾到指定的commitId

  • 撤銷git merge

git reset --hard HEAD #注意此時後面不跟^

  • 撤銷git reset --hard feature_branch_name
  • 撤銷git reset --hard commitId

分支強制指向 feature_branch_name用來做分支強制覆蓋,分支強制指向 commitId用來做代碼回滾

在執行這兩種操作前,先執行git log -3並手動記錄下當前的分支指針指向的commitId,比如是be164b,撤銷操作執行git reset --hard be164b即可

萬一忘記手動記錄之前的commitIdbe164b,此時有兩種途徑找回git reset --hard之前的commitIdbe164b,第一,去線上代碼倉庫查看;第二,使用git reflog -10查看

git pull 每次都需要輸入賬號和密碼

git config --global credential.helper store #終端執行

revert

  • 介紹

revert命令,反做,用來恢復代碼到某一次或者多次commit的改動之前,不會刪除該commit記錄,同時會增加一個刪除該commit的commit記錄。
注意:reset 會刪除 commit 記錄

  • 撤銷一次
  • git revert commitId
  • git push
  • 取消
  • git revert --abort
  • 撤銷連續的多次記錄,默認生成多次新commit
  • git revert commitId4…commitId6;//左邊是開區間,右邊是閉區間,即撤銷5和6,此時會多出2個commit記錄
  • git push
//撤銷前
commit6
commit5
commit4
commit3
commit2
commit1

//撤銷後
commit8 Revert commit5
commit7 Revert commit6
commit6
commit5
commit4
commit3
commit2
commit1
  • 撤銷連續的多次記錄,只生成一次的新commit
  • git revert --no-commit commitId4…commitId6
  • git commit -m ‘測試:revert2個commit,只新增一個commit’
  • git push
    注意:-n是–no-commit的簡寫,如果不帶這個參數會自動添加一條commit
//撤銷前
commit6
commit5
commit4
commit3
commit2
commit1

//撤銷後
commit7 測試:revert2個commit,只新增一個commit'
commit6
commit5
commit4
commit3
commit2
commit1
  • 應用場景一:撤銷commit歷史記錄中的某一次

假設目前有commit1-commit10共計10次記錄,只撤銷第6次,不撤銷7-10次

  • git revert commit6
  • git push
  • 應用場景二:將受保護的分支回滾代碼到指定的版本

在受保護的分支上,假如使用git reset --hard HEAD^回滾代碼,但是git push -f此時無效,因此可以採用revert命令,自動生成一條新的commit記錄後,此時git push有效

  • git revert commitId
  • git push

diff

  • 介紹

diff命令,對比兩次不同的commit之間的代碼

  • 對比文件
  • git diff /pages/main/index.js
  • 對比當前代碼與某一次的commit
  • git diff commitId
  • 對比兩次不同的的commit
  • git diff commitId1…commit2

參考資料

感謝閱讀,歡迎評論^-^

打賞我吧^-^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章