Git 高频命令、版本回退、分支操作、文件修改删除、撤销、标签、远程仓库推送、拉取
1. 高頻命令
git add
將工作文件修改提交到本地暫存區(qū)。
git add .
將所有修改過的工作文件提交暫存區(qū)(常用)。
git commit -m "XXX"
為本次修改打一個(gè) tag,當(dāng)然此條命令通常跟在 git add 后使用。每次 commit 都會(huì)有一個(gè)對應(yīng)的 tag,當(dāng)打包發(fā)布時(shí),往往我們會(huì)打?qū)?yīng) tag 的版本。所以 tag 是一次有意義記錄,它是和某次 git commit 綁定對應(yīng)的。
git push origin branch_name
將本地 branch_name 分支推到遠(yuǎn)程 branch_name 分支。
git branch -d branch_name
刪除本地分支 branch_name(注意:刪除本地分支時(shí),當(dāng)前所處分支不能是要?jiǎng)h除的該本地分支)。
git branch -D branch_name
強(qiáng)制刪除本地分支 branch_name(如果 branch_name 分支當(dāng)前修改的內(nèi)容沒有暫存,那么只有強(qiáng)制刪除有效)。
git push origin --delete branch_name
刪除服務(wù)器端分支 branch_name。
git pull origin branch_name
拉取服務(wù)器端 branch_name 分支的內(nèi)容并合并到本地 branch_name 分支(一般來說,多人共用一個(gè)分支時(shí),如果你有需要提交到服務(wù)器的內(nèi)容,則要先用此命令更新本地分支的內(nèi)容,然后再將新的內(nèi)容提交到服務(wù)器)。
git fetch origin branch_name
拉取服務(wù)器端 branch_name 分支的內(nèi)容,但不合并。此操作一般是不確定遠(yuǎn)端代碼是否存在問題,為保險(xiǎn)起見,可先拉取到本地查看,確認(rèn)無誤后,和合并此代碼到本地的對應(yīng)分支下。
- git merge origin/branch_name
將服務(wù)器端 branch_name 分支合并到本地當(dāng)前分支下。
- git merge branch_name
將本地 branch_name 分支合并到本地當(dāng)前分支下。
- git checkout -b branch_name origin/branch_name
如果本地沒有 branch_name 分支,想要基于服務(wù)器端 branch_name 分支創(chuàng)建一個(gè),但又不想影響到本地的當(dāng)前分支。可以使用此命令進(jìn)行本地 branch_name 分支的創(chuàng)建。
git branch
查看本地存在分支。
git branch -a
查看所有本地關(guān)聯(lián)到的分支(遠(yuǎn)端分支也能打印出來,但是關(guān)聯(lián)如果沒有建立,那么是不會(huì)顯示的,此時(shí)我們可以使用 git fetch 拉下來所有分支。)。
git status
查看當(dāng)前分支的狀態(tài),一般合并分支代碼后,用于檢查是否有沖突。
git reset --hard
回退到 commit id 提交的版本,僅對已經(jīng) commit 到本地的代碼有效
git checkout
該命令是對未提交到緩存區(qū)的代碼進(jìn)行撤銷。例如本地修改代碼之后,在沒有執(zhí)行 git add 命令之前又想撤銷操作,可以執(zhí)行該命令。
git reset HEAD --
該命令是將放入暫存區(qū)的代碼進(jìn)行撤銷,放入到工作區(qū)中。
git config user.name "提交者的名稱"
配置當(dāng)前倉庫下提交者的名稱。
git config user.email "郵箱"
配置當(dāng)前倉庫下提交者的郵箱。
git config --global user.name "用戶名"
配置全局提交者的名稱。
git config --global user.email "郵箱"
配置全局提交者的郵箱。
git config --global --list
查看我們的配置
2. git merge 和 git rebase
git merge 和 git rebase 使用場景
git merge一般用于新功能的開發(fā)和 bug 修復(fù);git rebase在主分支上進(jìn)行開發(fā),或者 Pull 的沖突解決;git merge主要是在主分支上進(jìn)行使用,而 git rebase 是在從分支上進(jìn)行使用。
git merge 和 git rebase 區(qū)別:
git merge會(huì)生成新的commit,而git rebase不會(huì)生成新的commit,會(huì)保留比較完整的提交歷史。git merge是按照時(shí)間順序進(jìn)行合并,而git rebase是將 主分支順序不變,插入到從分支的前端。
git rebase 注意事項(xiàng): 如果分支已經(jīng) Push 到了遠(yuǎn)程倉庫就不要對該分支進(jìn)行 git rebase 操作。如果已經(jīng)提交到了遠(yuǎn)程分支再進(jìn)行 Push 的時(shí)候容易出現(xiàn)沖突,我們可以采用 git push --force ,但是最好是永遠(yuǎn)不要使用這個(gè)命令。
3. 與遠(yuǎn)程服務(wù)器交互命令
- 添加遠(yuǎn)程服務(wù)器:
git remote add branch_alias(別名) http://github.com/ccod_project/dcmsstatics4-5git.git
- 查看遠(yuǎn)程服務(wù)器的相關(guān)信息:
git remote -v
git remote show branch_alias
- 重命名遠(yuǎn)程倉庫信:
git remote rename demo test
- 刪除遠(yuǎn)程倉庫:
git remote rm test
注:由于遠(yuǎn)程庫是空的,我們第一次推送 master 分支時(shí),加上了 -u 參數(shù), git 不但會(huì)把本地的 master 分支內(nèi)容推送到遠(yuǎn)程新的 master 分支,還會(huì)把本地的 master 分支和遠(yuǎn)程的 master 分支關(guān)聯(lián)起來,在以后的推送或者拉取時(shí)就可以簡化命令。
之后,只要本地作了提交,就可以通過命令把本地 master 分支的最新修改推送至 github
git push branch_alias master
- 從遠(yuǎn)程倉庫獲取數(shù)據(jù):
git fetch origin develop --- 只是獲取遠(yuǎn)程倉庫的數(shù)據(jù)至 .git 目錄,并未merge本地
git merge origin/develop --- 把獲取的遠(yuǎn)程倉庫的數(shù)據(jù)手工merge至當(dāng)前分支
git pull origin develop ---- 獲取遠(yuǎn)程倉庫的數(shù)據(jù),并自動(dòng)merge至當(dāng)前的分支,相當(dāng)于以上兩步
4. 版本回退
在 git 中,用 HEAD 表示當(dāng)前版本,也就是最新的提交 commit id ,上一個(gè)版本就是 HEAD^ ,上上一個(gè)版本就是 HEAD^^ ,當(dāng)然往上 100 個(gè)版本寫 100 個(gè) ^ 比較容易數(shù)不過來,所以寫成 HEAD~100 。
- 回退到上一個(gè)版本 :
git reset --hard HEAD^
- 回退到上上一個(gè)版本 :
git reset --hard HEAD^^
- 回退到上 N 個(gè)版本:
git reset --hard HEAD~N(N 是一個(gè)整數(shù))
- 回退到任意一個(gè)版本:
git reset ––hard 版本號
- 丟棄工作區(qū)的修改(撤銷):
git checkout -- file
- 刪除文件:
正確操作:git rm file git commit -m “remove file”(文件被刪除)
操作失誤:git checkout -- file(文件被恢復(fù))
5. 分支相關(guān)
- 查看當(dāng)前分支
git branch (-a)
- 新建分支
git branch develop(只是新建了一條分支,并未切換)
- 切換分支
git checkout develop
- 新建并切換分支
git checkout -b feature(相當(dāng)于3.10和3.11兩步操作)
- 刪除分支
git branch -d feature(注意:不能刪除當(dāng)前所在分支)
- 合并分支(–no-ff參數(shù),表示禁用Fast forward):
git checkout develop && git merge feature(把feature分支合并到develop分支)
注:
因?yàn)槲覀儎?chuàng)建 git 版本庫時(shí), git 自動(dòng)為我們創(chuàng)建了唯一一個(gè) master 分支, 所以默認(rèn) git commit 就是往 master 分支上提交更改。
如果要丟棄一個(gè)沒有被合并過的分支,可以通過 git branch -D 強(qiáng)行刪除。
建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用 git branch --set-upstream branch-name origin/branch-name ;
匯總:
查看分支:git branch,git branch -r 查看遠(yuǎn)程服務(wù)器上有多少個(gè)分支
創(chuàng)建分支:git branch 分支名稱(Develop)
切換分支:git checkout 分支名稱(Master)
合并分支:git merge 分支名稱
刪除分支:git branch -d 分支名稱(刪除本地分支),git push origin --delete 分支名稱 (刪除遠(yuǎn)程服務(wù)器的分支)
git branch 分支的名稱 創(chuàng)建新的分支
git branch 分支名稱 commitId 在指定 commitId 基礎(chǔ)上創(chuàng)建分支
git checkout 分支的名稱 切換分支
git checkout -b 分支的名稱 創(chuàng)建新的分支并切換到該分支上
git checkout -b 分支名稱 commitId 在指定 commitId 基礎(chǔ)上創(chuàng)建分支并切換到該分支
git branch 查看本地所有的分支
git branch -a 查看本地和遠(yuǎn)程所有的分支。
git branch -m 原來的名稱 新的名稱 修改分支的名稱
修改遠(yuǎn)程倉庫分支的名稱修改遠(yuǎn)程分支的名稱需要我們先將遠(yuǎn)程分支刪除。
然后修改本地分支名稱。最后將本地分支名稱提交到遠(yuǎn)程倉庫。git push origin 分支名稱 將分支推送到遠(yuǎn)程倉庫中。
git branch -d 分支名稱 刪除本地倉庫分支
git push origin --delete 分支名稱 刪除遠(yuǎn)程倉庫分支。
6. git log 命令
git log 查看當(dāng)前分支所有提交歷史記錄。
git log --all 查看所有分支的提交歷史記錄
git log --oneline 查看簡潔提交歷史記錄
git reflog 查看所有分支的所有操作記錄 (包括被刪除的commit 操作記錄)后面會(huì)介紹到。
git log -n2 查看最近2次提交的歷史記錄
git log -p -2 最近兩次提交差異顯示
git log --pretty=oneline 查看簡潔提交歷史記錄
7. git 刪除修改文件
git rm + git mv 命令介紹
git rm 文件名稱 從工作目錄中刪除該文件并且本地不保留。
git rm --cached 文件名稱 從版本控制中刪除該文件,但在本地保留該文件(相當(dāng)于將文件從暫存區(qū)撤銷到工作區(qū)中)
git mv 原來名稱 新的名稱 更改文件名并提交到本地倉庫 (暫存區(qū)和本地倉庫文件)本地倉庫需要再次執(zhí)行 commit 提交。
8. git 幫助
你可能覺得 Git 命令這么多,記不住啊。沒事,學(xué)會(huì)下面 3 個(gè)命令,快速幫你進(jìn)行回憶操作。
git help展示經(jīng)常使用命令的介紹。git help 具體操作命令對具體命令操作的介紹 會(huì)打開默認(rèn)游覽器進(jìn)行查看具體命令介紹。git 具體操作命令 -h對具體命令操作的介紹 例如 git commit -h ,git add -h。
9. git 撤銷
當(dāng)你完成工作將文件提交到工作區(qū)或者暫存區(qū)甚至本地倉庫后,你才發(fā)現(xiàn)提交的內(nèi)容有問題。當(dāng)你抓耳撓腮想著"怎么辦,怎么辦”的時(shí)候,不如看看下面命令,也許會(huì)幫助到你哦。
git chekout --文件名稱 將工作區(qū)的文件撤銷到緩存區(qū)中(前提是該文件已經(jīng)執(zhí)行過 git add 操作。)git reset 文件名稱 或 git reset HEAD 文件名稱 將暫存區(qū)的代碼撤銷到工作區(qū)中。git reset --hard 要切換 commit 的記錄id 丟棄所有歷史記錄并將更改返回到指定的提交歷史上git reset --hard 執(zhí)行的時(shí)候是比較危險(xiǎn)的,它的危險(xiǎn)之處是如果你的文件還未 commit 執(zhí)行 git reset --hard 可能導(dǎo)致文件無法進(jìn)行恢復(fù)的。如果已經(jīng) commit 我們可以通過 reflog 來找回它。
下面還有3個(gè)比較有意思的命令:
git reset --soft HEAD^:將最新的提交的記錄還原到到暫存區(qū)
git reset --mixed HEAD^:將最新的提交的記錄還原到工作區(qū)
git reset --hard HEAD^:將最新的提交的記錄全部清除
10. 歷史記錄對比命令介紹
git diff --cached | git diff --stage 暫存區(qū)和最新提交內(nèi)容比較
git diff --文件名 工作區(qū)和暫存區(qū)內(nèi)容的比較。
git diff commitId1 commitId2 --文件名 查看不同歷史提交文件內(nèi)容的不同
git diff 分支1名稱 分支2名稱 比較分支1 和分支2 提交文件內(nèi)容的不同。
11. 遠(yuǎn)程倉庫推送、拉取操作命令介紹
git push 將本地分支的更新推送到遠(yuǎn)程倉庫中。
git fetch 從遠(yuǎn)程倉庫中獲取最新的內(nèi)容 但是不會(huì)執(zhí)行合并的操作(git merge)
git pull 從遠(yuǎn)程倉庫中獲取最新內(nèi)容并且合并到本地倉庫中,相當(dāng)于 git merge + git fetch 的操作
12. git 分支合并操作
- git merge 分支名稱
git merge <branch name>
git merge 一般我們都是主分支合并從分支比較多。
- git rebase 分支名稱
和 git merge 的操作方式是一樣的,不過一般 git rebae 主要是用來將主分支合并到從分支的操作中比較常見。后面我們會(huì)介紹 git merge 和 git rebase的區(qū)別。
git rebase 和 git merge 的區(qū)別
- git merge 會(huì)生成新的 commit,而 git rebase 不會(huì)生成新的 commit,會(huì)保留比較完整的提交歷史。
- git merge 是按照時(shí)間順序進(jìn)行合并,而 git rebase 是將 主分支順序不變,插入到從分支的前端。
git merge 和 git rebase 使用場景:
- git merge 一般用于新功能的開發(fā)和 bug 修復(fù);
- git rebase 在主分支上進(jìn)行開發(fā),或者 Pull 的沖突解決;
- git merge 主要是在主分支上進(jìn)行使用,而 git rebase 是在從分支上進(jìn)行使用。
git rebase 注意事項(xiàng):
如果分支已經(jīng) Push 到了遠(yuǎn)程倉庫就不要對該分支進(jìn)行 git rebase 操作。如果已經(jīng)提交到了遠(yuǎn)程分支再進(jìn)行 Push 的時(shí)候容易出現(xiàn)沖突,我們可以采用 git push --force,但是最好是永遠(yuǎn)不要使用這個(gè)命令。
13. 標(biāo)簽種類的介紹
Git 標(biāo)簽分為 2 種。
輕量標(biāo)簽(lightweight)
輕量標(biāo)簽 一般是用于臨時(shí)的標(biāo)簽 ,輕量標(biāo)簽僅僅記錄了commit 的信息。
附注標(biāo)簽(annotated)
附注標(biāo)簽 記錄的信息更為詳細(xì) 它包含了創(chuàng)建標(biāo)簽的作者 創(chuàng)建日期 以及標(biāo)簽信息。一般建議創(chuàng)建附注標(biāo)簽。
Git 標(biāo)簽操作命令介紹
git tag 標(biāo)簽名稱 創(chuàng)建輕量標(biāo)簽
**git tag -a 標(biāo)簽名稱 -m '標(biāo)簽注釋' ** 創(chuàng)建附注標(biāo)簽,一般建議使用附注標(biāo)簽。
git tag -a commitId 指定 commitId 創(chuàng)建標(biāo)簽
git tag 和 git tag --list | git tag -l 查看所有的標(biāo)簽。
git tag -l 'v*.0' 查看以 v 開頭和以 0 結(jié)尾的所有的標(biāo)簽
git show 標(biāo)簽的名稱 查看標(biāo)簽的具體信息
git ls-remote --tags 查看遠(yuǎn)程倉庫的標(biāo)簽列表
git push origin 標(biāo)簽名稱 將標(biāo)簽推送到遠(yuǎn)程倉庫中。
git push origin --tags 提交本地所有的標(biāo)簽到遠(yuǎn)程倉庫
git tag -d 標(biāo)簽名稱 刪除該標(biāo)簽
git push origin :refs/tags/標(biāo)簽名稱 刪除遠(yuǎn)程倉庫的標(biāo)簽。
14. git 最好不要使用的危險(xiǎn)命令
- git reset --hard
這個(gè)命令之切換不同的歷史記錄,危險(xiǎn)之處在于如果添加的工作內(nèi)容沒有執(zhí)行 commit,執(zhí)行 git reset —hard,那么這些沒有 commit 的工作內(nèi)容有可能丟失。
- git commit --amend
git rebase -i git commit --amend 和 git rebase -i 都可以用來修改我們的 commit 并不會(huì)產(chǎn)生新的 commit,但是這個(gè)修改操作必須是在你還沒有推送遠(yuǎn)程倉庫前去執(zhí)行。因?yàn)橥ㄟ^這2個(gè)命令進(jìn)行修改雖然不會(huì)產(chǎn)生新的 commit,但是我們的 commitId 會(huì)發(fā)生變化,我們在推送的時(shí)候會(huì)報(bào)Note about fast-forwards,如果想將你的修改推送只能使用強(qiáng)制推送 git push -f 操作,這樣會(huì)強(qiáng)制將你的歷史版本覆蓋到遠(yuǎn)程倉庫。當(dāng)然別人的提交歷史也會(huì)被覆蓋掉。
- git push -f
上面我們已經(jīng)說了 執(zhí)行該操作會(huì)強(qiáng)行將自己本地倉庫歷史版本覆蓋到遠(yuǎn)程倉庫的歷史版本。這樣別人提交的歷史版本信息會(huì)丟失掉。
我這里所說的最好不要使用也不是很絕對哈,危險(xiǎn)命令的危險(xiǎn)在于你不了解它的危害就胡亂操作。當(dāng)我們知道它們的注意事項(xiàng),這些危險(xiǎn)命令有時(shí)候?qū)ξ覀兪怯欣摹@缥覀儎?chuàng)建了幾個(gè)提交并且沒有將其提交到遠(yuǎn)程倉庫,我們完全可使用 git reset --hard 將我們不像要的 commit 丟棄掉,可以通過 git commit —amend 和 git rebase -i 對我們已提交的 commit 進(jìn)行修改。但是 git push 這個(gè)操作是千萬不要執(zhí)行的。
文章參考來源:
https://gitbook.cn/books/5cb7dc185e228a2b9d502831/index.html
總結(jié)
以上是生活随笔為你收集整理的Git 高频命令、版本回退、分支操作、文件修改删除、撤销、标签、远程仓库推送、拉取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前列腺炎靠彩超检查行吗?是不是只能查出增
- 下一篇: 如何找到自己的优势并坚定信念执行下去