因?yàn)樵诠ぷ髦幸?jīng)常與git打交道,想想入職時(shí)間有四個(gè)五月了,實(shí)際工作時(shí)間兩三個(gè)月左右。正好趁著這個(gè)假期做一下總結(jié)。
先推薦兩個(gè)git的教程:
git基礎(chǔ)-獲取git倉(cāng)庫(kù)
git版本庫(kù)的初始化,一般有兩種方式:
- 克隆現(xiàn)有的倉(cāng)庫(kù)
- 克隆倉(cāng)庫(kù)的命令格式為
git clone [url],比如:git clone https://github.com/libgit2/libgit2
- 克隆倉(cāng)庫(kù)的命令格式為
- 在現(xiàn)有的目錄下初始化倉(cāng)庫(kù)**
- 如果你打算使用 Git 來(lái)對(duì)現(xiàn)有的項(xiàng)目進(jìn)行管理,你只需要進(jìn)入該項(xiàng)目目錄并輸入:
git init - 這時(shí)候如果你需要將它放到遠(yuǎn)程服務(wù)器上,可以在遠(yuǎn)程服務(wù)器上創(chuàng)建一個(gè)目錄,并把可訪問(wèn)的URL記錄下來(lái),此時(shí)你就可以利用
git remote add命令來(lái)增加一個(gè)遠(yuǎn)程服務(wù)器端
- 如果你打算使用 Git 來(lái)對(duì)現(xiàn)有的項(xiàng)目進(jìn)行管理,你只需要進(jìn)入該項(xiàng)目目錄并輸入:
注:git remote add origin git://github.com/someone/another_project.git
上面的命令就會(huì)增加URL地址為git://github.com/someone/another_project.git,名稱(chēng)為 origin 的遠(yuǎn)程服務(wù)器,以后提交代碼的時(shí)候只需要使用 origin 別名即可.
git-分支
首先,如果我們要?jiǎng)?chuàng)建一個(gè)dev分支,然后切換到dev分支:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
可以用下面的一行來(lái)代替:
$ git checkout -b dev
如果我們?cè)?code>dev分支上做了一些工作,完成后要先切回master分支
$ git checkout master
Switched to branch 'master'
現(xiàn)在,我們把dev分支的工作提交到master分支上:
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git merge命令用于合并指定分支到當(dāng)前分支。
合并完成后,就可以放心地刪除dev分支了:
$ git branch -d dev
Deleted branch dev (was fec145a).
工作中經(jīng)常遇到的情景是:別人遠(yuǎn)程創(chuàng)建了一個(gè)分支,怎么切換到遠(yuǎn)程的分支上呢?
git branch -D #刪除一個(gè)分支
git branch -va #查看所有的遠(yuǎn)程分支
git checkout -b <name> <remote name> #創(chuàng)建并轉(zhuǎn)到遠(yuǎn)程分支并改名字為name
git checkout -b <name> <remote name>就是在本地新建一個(gè)名為<name>的分支,并轉(zhuǎn)到遠(yuǎn)程的分支<remote name>上。
git-版本回退
有時(shí)候我們發(fā)現(xiàn),自己commit提交的東西不對(duì),那可怎么辦呢?
首先,git必須知道當(dāng)前版本是哪個(gè)版本,在git中,用HEAD表示當(dāng)前版本,也就是最新的提交,上一個(gè)版本就是HEAD^,上上一個(gè)版本就是HEAD^^,當(dāng)然往上100個(gè)版本寫(xiě)100個(gè)^比較容易數(shù)不過(guò)來(lái),所以寫(xiě)成HEAD~100。
$ git reset --hard HEAD^
總結(jié)一下:
- HEAD指向的版本就是當(dāng)前版本,因此,Git允許我們?cè)诎姹镜臍v史之間穿梭,使用命令
git reset --hard commit_id。 - 穿梭前,用
git log可以查看提交歷史,以便確定要回退到哪個(gè)版本。 - 要重返未來(lái),用
git reflog查看命令歷史,以便確定要回到未來(lái)的哪個(gè)版本。
git-子模塊(submoudle)
有種情況我們經(jīng)常會(huì)遇到:某個(gè)工作中的項(xiàng)目需要包含并使用另一個(gè)項(xiàng)目。 也許是第三方庫(kù),或者你獨(dú)立開(kāi)發(fā)的,用于多個(gè)父項(xiàng)目的庫(kù)。 現(xiàn)在問(wèn)題來(lái)了:你想要把它們當(dāng)做兩個(gè)獨(dú)立的項(xiàng)目,同時(shí)又想在一個(gè)項(xiàng)目中使用另一個(gè)。
git通過(guò)子模塊來(lái)解決這個(gè)問(wèn)題。 子模塊允許你將一個(gè) Git 倉(cāng)庫(kù)作為另一個(gè)git倉(cāng)庫(kù)的子目錄。 它能讓你將另一個(gè)倉(cāng)庫(kù)克隆到自己的項(xiàng)目中,同時(shí)還保持提交的獨(dú)立。
我們首先將一個(gè)已存在的git倉(cāng)庫(kù)添加為正在工作的倉(cāng)庫(kù)的子模塊。 你可以通過(guò)在 git submodule add命令后面加上想要跟蹤的項(xiàng)目 URL 來(lái)添加新的子模塊。
$ git submodule add https://github.com/chaconinc/DbConnector
git-clean用法
$ git clean -fd -n #列出要?jiǎng)h除的文件列表
$ git clean -f -d
$ git clean -fd
其中 -f 表示文件 -d 表示目錄, 如果還要?jiǎng)h除.gitignore中的文件那么再加上-x.
如果git submodule中也存在需要?jiǎng)h除的文件那么需要再加個(gè)-f, 變成git clean -dff
$ git revert
還原一個(gè)版本的修改,必須提供一個(gè)具體的Git版本號(hào),例如git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20,Git的版本號(hào)都是生成的一個(gè)哈希值