Git复习(十一)之常见命令用法
創建版本庫
git init進入一個文件,執行該命令此時目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄里面的文件,不然改亂了,就把Git倉庫給破壞了。如果你沒有看到.git目錄,那是因為這個目錄默認是
隱藏的,用ls -ah命令就可以看見。
添加文件到Git倉庫
第一步:添加到暫存區
git add xxxxxx可以是“.”表示所有文件,也可以是指定的文件名,該命令可反復多次使用,添加多個文件
??如果此時添加失敗,可能是這個文件被.gitignore忽略了,如果我們確實想添加該文件可以使用參數 -f?
強制添加文件
git add -f xxx第二步:提交到倉庫
git commit -m "xxx"xxx是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。
執行完該命令可能會提示:
-
1 file changed:1個文件被改動
-
2 insertions:插入了兩行內容
??如果不用git add到暫存區,那就不會加入到commit中
查看當前工作區的狀態?
git status執行完該命令可能會提示:?
-
Changes not staged for commit(還沒有準備提交的修改)
查看修改內容
情況一:查看當前文件的修改
git diff xxxxxx想要查看修改的文件名
情況二:查看當前版本和版本庫最新版本的區別
git reset HEAD -- xxxxxx想要查看修改的文件名
查看提交歷史
git log?命令顯示從最近到最遠的提交日志,可以通過git log來確定要回退到哪個版本
git log --pretty=oneline嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數
??你看到的一大串類似1094adb...的是commit id(版本號)
版本回退(已經commit,回到某一個commit)
git reset --hard xxxxxx表示版本號或者HEAD
情況一:回退到上一個版本
git reset --hard HEAD^情況二:回退到上上一個版本
git reset --hard HEAD^^情況三:回退到上100個版本
git reset --hard HEAD~100首先,Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較
容易數不過來,所以寫成HEAD~100。
情況四:回退到回退之前的版本
git reset --hard xxxxxx是想要回退的那個版本的commit id(版本號),其余三個情況也可以不使用HEAD,使commit id
兩種方法取到該版本號:
-
只要上面的命令行窗口還沒有被關掉,你就可以順著往上找啊找啊
-
使用git reflog查看命令歷史找到該版本號
撤銷修改
情況一:已修改,未暫存,回退到最近一次commit(修改看不見了)
git checkout -- xxxxxx可以是“.”也可以是指定文件名,此操作其實就是丟棄對工作區的修改
情況二:已修改,已暫存,回退到最近一次add
git checkout -- xxxxxx可以是“.”也可以是指定文件名,這種情況是git add后又做了修改,想要回退到add
情況三:已修改,已暫存,未提交,回退到工作區(修改保留在工作區)
git reset HEAD xxxxxx可以是“.”也可以是指定文件名,此時可以使用git checkout丟棄對工作區的修改
情況四:已修改,已暫存,已提交,回退到上一個commit
git reset --hard HEAD^從版本庫刪除文件
git rm xxxxxx是文件名,命令git rm用于刪除一個文件。如果一個文件已經被提交到版本庫,那么你永遠不用擔心誤刪,但是要小心,你只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內容。
刪除文件
rm xxxxxx是文件名,只是刪除本地
接下來有兩個選擇:
-
確實要從版本庫中刪除該文件:git rm xxx -> git commit
-
刪錯了恢復到最新版本:git checkout -- xxx
查看命令歷史
git reflog關聯本地倉庫和遠程倉庫
情況一:先在本地創建了一個倉庫,然后在遠程也創建了一個倉庫,現在想要將他們關聯,也就是先有本地庫,然后有遠程庫
git remote add origin xxxxxx是遠程倉庫地址,origin是遠程倉庫名字(默認)
情況二:先在遠程創建一個倉庫,然后從遠程庫克隆
從遠程庫克隆
git clone xxxxxx是遠程倉庫地址
創建分支
情況一:從本地已存在的分支創建一個新的分支(相當于克隆當前本地分支)?
方法一:
git branch xxx?xxx是分支名,這種方法創建的分支并不會切換分支,還是在當前分支
方法二:?
git checkout -b xxxxxx是分支名,這種方法創建的分支會切換分支,在新創建的分支
情況二:從遠程已存在的分支創建一個新的分支(相當于克隆遠程分支到本地)
git checkout xxx1 -b xxx2xxx1是遠程分支名,xxx2是本地分支名
假設一:該分支是我們自己在遠程庫創建的
xxx1和xxx2不同名:那么相當于我們在本地基于該遠程分支新創建了一個分支,之后提交操作都會提交到我們新創建的這個分支的遠程分支上
xxx1和xxx2同名:相當于我們在本地創建了該遠程分支的本地分支,并與之關聯,之后提交操作都會提交到該遠程分支上
假設二:該分支是其他人在遠程庫創建的(多人合作開發)
xxx1和xxx2不同名:那么相當于我們在本地基于該遠程分支新創建了一個“自己”的分支,只有我們自己用,提交不會有沖突
xxx1和xxx2同名:相當于我們在本地創建了該遠程分支的本地分支,并與之關聯,之后提交操作都會提交到該遠程分支上,因為大家都是從該分支創建的本地分支,然后提交,所以可能會出現沖突
切換分支
git checkout xxxxxx是分支名
查看分支
情況一:查看本地分支
git branch該命令會列出本地所有分支,當前分支前面會標一個*號
情況二:查看遠程分支?
git branch -r該命令會列出遠程所有分支
合并分支?
情況一:快速合并(不會創建新的提交,分支合并圖中看不出來曾經做過合并)
git merge xxxxxx是分支名,該命令會將xxx合并到當前分支
如果沒有沖突,執行該命令會提示?Fast-forward,Git告訴我們,這次合并是"快進模式",也就是直接把master指向dev的當前提交,所以合并速度非常快。當然,也不是每次合并都能Fast-forward,
情況二:非快速合并(創建新的提交,分支合并圖中可以看出來曾經做過合并)
git merge --no-ff -m "merge with no-ff" xxxxxx是分支名,該命令會將xxx合并到當前分支
--no-ff表示強制禁用Fast forward模式,因為本次合并要創建一個新的commit,所以加上-m參數,把commit描述寫進去。
刪除分支
情況一:分支已經被合并
git branch -d xxxxxx是分支名
情況一:分支沒有被合并
git branch -D xxxxxx是分支名,強制刪除分支
注意;刪除分支前要先切換到其他分支,在刪除想要刪除的分支
查看分支合并圖?
git log --graph??可以添加參數 --pertty=oneline和 --abbrev-commit?
推送分支
git push origin xxxxxx是分支名,推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上,并不是一定要把本地分支往遠程推送?
抓取分支(就是創建分支的情況二)
git checkout -b branch-name origin/branch-name?暫存工作現場
git stash??我們知道分支的更改不提交是沒辦法切換分支的,但是現在我就是不想提交當前分支的修改切換分支,如何實現呢?就是使用該命令!!!,可以多次stash,恢復的時候,先用git stash list查看,然后恢復指定的stash
查看暫存內容
git stash list?執行該命令可以查看暫存內容列表
恢復工作現場
情況一:恢復工作現場并刪除stash內容
git stash pop情況一:恢復工作現場不刪除stash內容
git stash apply stash@{0}stash@{0}是指定的stash,可選的
刪除暫存內容
git stash drop復制特定提交到當前分支
git cherry-pick xxxxxx是commit id,執行該命令Git自動給當前分支做一次提交,假如我們在a分支上做了修改并提交,我希望b分支上也有這次修改:
-
獲取a分支此次修改提交的commit id
-
切到b分支
-
執行git cherry-pick commit id
案例:
$ git branch * devmaster $ git cherry-pick 4c805e2 [master 1d4b803] fix bug 1011 file changed, 1 insertion(+), 1 deletion(-)Git自動給dev分支做了一次提交,注意這次提交的commit是1d4b803,它并不同于master的4c805e2,因為這兩個commit只是改動相同,但確實是兩個不同的commit。用git cherry-pick,我們就不需要在dev分支上手動再把修
bug的過程重復一遍。
查看遠程庫信息
git remote執行該命令輸出 origin ,遠程倉庫的默認名稱是origin??梢蕴砑訁?-v 查看更加詳細的信息
git remote -v執行該命令顯示可以抓取和推送的origin的地址。如果沒有推送權限,就看不到push的地址:
origin git@github.com:michaelliao/learngit.git (fetch)?
origin git@github.com:michaelliao/learngit.git (push)
建立本地分支和遠程分支的關聯
git branch --set-upstream branch-name origin/branch-name拉取服務器最新代碼
情況一:當前本地分支和遠程分支已經關聯?
git pull情況二:當前本地分支和遠程分支沒有關聯
方法一:直接拉取指定的遠程分支
git pull origin xxx?方法二:先建立當前本地分支和遠程分支的關聯在拉取
git branch --set-upstream-to=branchname origin/branchname再執行
git pull創建標簽
情況一:給當前的版本創建標簽
git tag xxxxxx是標簽的名字,eg:v1.0
情況二:給指定的版本創建標簽
git tag xxx1 xxx2xxx1是標簽的名字,eg:v1.0,xxx2是commit id
情況三:創建帶有說明的標簽
git tag -a xxx1 -m "xxx2" xxx3xxx1是標簽名,xxx2是說明,xxx3是commit id可選
查看標簽列表
git tag?顯示標簽列表,標簽不是按時間順序列出,而是按字母排序的
查看標簽信息
git show xxxxxx是標簽名
刪除標簽
情況一:刪除本地標簽?
git tag -d xxxxxx是標簽名
情況一:刪除遠程標簽
1、先刪除本地標簽?
git tag -d xxx2、再刪除遠程標簽
git push origin :refs/tags/xxxxxx是標簽名
推送標簽
情況一:推送指定標簽到遠程
git push origin xxx?xxx是標簽名
情況一:推送所有未推送的標簽到遠程
git push origin --tags?
轉載于:https://www.cnblogs.com/kunmomo/p/11364799.html
總結
以上是生活随笔為你收集整理的Git复习(十一)之常见命令用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git复习(十)之常见报错和疑问
- 下一篇: Git复习(十二)之命令专场