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