在Git中,用HEAD表示當(dāng)前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一樣),
上一個版本就是HEAD,上上一個版本就是HEAD,當(dāng)然往上100個版本寫100個比較容易數(shù)不過來,
所以寫成HEAD~100
- git log可以查看提交歷史
- Git提供了一個命令git reflog用來記錄你的每一次命令
要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本 - git checkout -- readme.txt 丟棄工作區(qū)的修改
就是讓這個文件回到最近一次git commit或git add時的狀態(tài)
git checkout -- file命令中的--很重要,沒有--,就變成了“切換到另一個分支”的命令 - git reset HEAD <file>可以把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū)
git reset命令既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū)。當(dāng)我們用HEAD時,表示最新的版本。 - 回退到上一版本
git reset --hard HEAD^ - 回退到指定版本(可以是未來的)
git reset --hard 1094a
HEAD指向的就是當(dāng)前分支
- 由于遠(yuǎn)程庫是空的,我們第一次推送master分支時,加上了-u參數(shù),
Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,
還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令。
git push -u origin master - git remote rm <name> 刪除遠(yuǎn)程庫
此處的“刪除”其實是解除了本地和遠(yuǎn)程的綁定關(guān)系,并不是物理上刪除了遠(yuǎn)程庫。
遠(yuǎn)程庫本身并沒有任何改動。要真正刪除遠(yuǎn)程庫,需要登錄到GitHub,在后臺頁面找到刪除按鈕再刪除。 - Git支持多種協(xié)議,包括https,但ssh協(xié)議速度最快。
- git checkout命令加上-b參數(shù)表示創(chuàng)建并切換
- git branch命令查看當(dāng)前分支
- git branch命令會列出所有分支,當(dāng)前分支前面會標(biāo)一個*號
- 我們把dev分支的工作成果合并到master分支上
git merge dev
git merge命令用于合并指定分支到當(dāng)前分支 - 刪除dev分支 git branch -d dev
- Git鼓勵你使用分支完成某個任務(wù),合并后再刪掉分支,這和直接在master分支上工作效果是一樣的,但過程更安全。
- 切換分支這個動作,用switch更科學(xué)。因此,最新版本的Git提供了新的git switch命令來切換分支:
創(chuàng)建并切換到新的dev分支,可以使用:
git switch -c dev
直接切換到已有的master分支,可以使用:
git switch master
小結(jié)
Git鼓勵大量使用分支:
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>或者git switch <name>
創(chuàng)建+切換分支:git checkout -b <name>或者git switch -c <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>
git log --graph命令可以看到分支合并圖
通常,合并分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支后,會丟掉分支信息。
如果要強(qiáng)制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev
--no-ff參數(shù),表示禁用Fast forward
因為本次合并要創(chuàng)建一個新的commit,所以加上-m參數(shù),把commit描述寫進(jìn)去。
合并分支時,加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支,能看出來曾經(jīng)做過合并,
而fast forward合并就看不出來曾經(jīng)做過合并。git stash
git stash apply恢復(fù),但是恢復(fù)后,stash內(nèi)容并不刪除,你需要用git stash drop來刪除;
另一種方式是用git stash pop,恢復(fù)的同時把stash內(nèi)容也刪了
你可以多次stash,恢復(fù)的時候,先用git stash list查看,然后恢復(fù)指定的stash,用命令:
$ git stash apply stash@{0}Git專門提供了一個cherry-pick命令,讓我們能復(fù)制一個特定的提交到當(dāng)前分支
因為這兩個commit只是改動相同,但確實是兩個不同的commit。
用git cherry-pick,我們就不需要在dev分支上手動再把修bug的過程重復(fù)一遍。如果要丟棄一個沒有被合并過的分支,可以通過git branch -D <name>強(qiáng)行刪除。
要查看遠(yuǎn)程庫的信息,用git remote
或者,用git remote -v顯示更詳細(xì)的信息
-rebase操作可以把本地未push的分叉提交歷史整理成直線;rebase的目的是使得我們在查看歷史提交的變化時更容易,因為分叉的提交需要三方對比。
創(chuàng)建標(biāo)簽git tag <name>
git tag查看所有標(biāo)簽
默認(rèn)標(biāo)簽是打在最新提交的commit上的
可以在在后面添加指定commit_id
還可以創(chuàng)建帶有說明的標(biāo)簽,用-a指定標(biāo)簽名,-m指定說明文字:
git tag -a v0.1 -m "version 0.1 released" 1094adb
標(biāo)簽總是和某個commit掛鉤命令git push origin <tagname>可以推送一個本地標(biāo)簽;
命令git push origin --tags可以推送全部未推送過的本地標(biāo)簽;
命令git tag -d <tagname>可以刪除一個本地標(biāo)簽;
命令git push origin :refs/tags/<tagname>可以刪除一個遠(yuǎn)程標(biāo)簽。如果敲git st就表示git status那就簡單多了,當(dāng)然這種偷懶的辦法我們是極力贊成的。
我們只需要敲一行命令,告訴Git,以后st就表示status:
$ git config --global alias.st status搭建Git服務(wù)器非常簡單,通常10分鐘即可完成;
要方便管理公鑰,用Gitosis;
要像SVN那樣變態(tài)地控制權(quán)限,用Gitolite。Git有很多圖形界面工具,這里我們推薦SourceTree
免費Git圖形界面工具
git命令大全
參考:廖雪峰-Git教程