最新更新時間: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
即可
萬一忘記手動記錄之前的commitId
be164b
,此時有兩種途徑找回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
參考資料
感謝閱讀,歡迎評論^-^