Git基礎學習
git的基本命令,這篇文件講的還是比較簡潔扼要!
安裝msysgit
下載地址:msysgit,安裝完成后配置系統環境變量,打開git bash,盡量少用圖形化工具git gui,推薦使用命令行。
你可以在本地操作git,也可以在遠程服務器倉庫操作git,例如github,這樣你就需要配置下ssh key,詳情請查看官方文檔說明generating-ssh-keys
git操作
1、檢出倉庫(克隆倉庫)
本地克隆:
$ git clone /path/to/repository
遠程克隆:
$ git clone <server>
ssh方式(推薦),例如:
$ git clone git@github.com:hcy2367/hcy2367.github.io.git
https方式,例如:
$ git clone https://github.com/hcy2367/hcy2367.github.io.git
2、創建新倉庫
$ git init
3、添加工作區(working dir)新的或改動的文件到暫存區(Index或stage)
$ git add <filename> | --all | -A
git工作區,暫存區,HEAD區(可以理解為本地倉庫master分支的最新版本)關系圖:
4、從暫存區刪除添加或改動的的文件
$ git rm --cached <filename> | *
5、查看當前倉庫狀態
執行add、commit操作之前和之后最好都要查看下當前提交的一些狀態信息,防止漏添加,錯提交
$ git status
6、查看和對比修改的內容
$ git diff <filename>
7、查看提交的歷史記錄版本(添加參數:–pretty=oneline,用于輸出少量信息)
$ git log
8、提交到當前分支master HEAD區
$ git commit -m '代碼提交信息'
9、版本回退
HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,往上100個版本HEAD~100,如回退到上一個版本,則命令如下:
$ git reset --hard HEAD^
其中–hard參數表示撤銷工作區與暫存區的修改,回退到指定歷史版本,可使用如下命令:
$ git reset --hard 20038
其中20038為提交版本的前五位ID號(原始:20038c521d4e81aca8ec8bca9f05d50ebb4fb835),查看時可使用如下命令:
$ git reflog
10、撤銷修改
丟棄工作區的修改,已添加到暫存區的文件不受影響,注意:不能少了–參數,命令如下:
$ git checkout -- <filename> | *
把暫存區的修改撤銷掉,重新放回工作區,命令如下:
$ git reset HEAD <filename> | *
11、刪除文件
刪除后再commit到HEAD區,如果誤刪文件了,可以恢復到該文件的最新版本。
$ git rm <filename>
12、推送到遠端倉庫
$ git push -u origin master | <branch>
-u參數表示初次推送時把本地的master分支和遠程的master分支關聯起來;
如果你還沒有克隆現有倉庫,并欲將你的本地倉庫連接到某個遠程服務器,你可以使用如下命令添加:
$ git remote add origin <server>
例如這樣你就能夠將你的改動推送到所添加的服務器上去了:
$ git remote add origin git@github.com:hcy2367/hcy2367.github.io.git
13、分支
創建分支:
$ git checkout -b <branch>
切換回主分支:
$ git checkout master
列出所有分支:
$ git branch
合并指定分支到當前分支(默認使用fast forward方式):
$ git merge <branch>
普通模式合并(禁用fast forward,因為該方式合并后看不到歷史提交信息):
$ git merge --no-ff -m "merge with no-ff" <branch>
刪除分支:
$ git branch -d <branch>
丟棄一個沒有被合并過的分支,可以通過如下命令強行刪除:
$ git branch -D <branch>
推送到遠端倉庫:
$ git push origin <branch>
14、更新與合并
查看遠程信息:
$ git remote -v
從遠程獲取最新版本到本地倉庫,并自動merge到本地分支:
$ git pull origin master
從遠程獲取最新版本到本地倉庫,不自動merge到本地分支:
$ git fetch
合并分支前先到另外一個分支更新代碼,然后本地合并后提交到遠程倉庫; 當有沖突時,可使用$ git diff或$ git status命令查看分支的差異,手工解決后,再執行$ git add <filename>命令以將它們標記為合并成功。查看提交記錄圖形信息:
$ git log --graph --pretty=oneline --abbrev-commit
15、標簽(可以理解為版本庫的快照)
創建標簽:
$ git tag <tagname>
可使用命令如下命令找到歷史提交的ID號:
$ git log --pretty=oneline --abbrev-commit
再打標簽:
$ git tag v1.0 6224937
還可以創建帶有說明的標簽,用-a指定標簽名,-m指定說明文字:
$ git tag -a v1.1 -m "version 1.1 released" 3628164
查看標簽:
$ git tag
查看標簽信息:
$ git show v1.0
刪除本地標簽:
$ git tag -d v1.1
推送標簽到遠程:
$ git push origin <tagname>
一次性推送全部未推送的標簽:
$ git push origin --tags
刪除遠程標簽(先刪除本地,再刪除對應的遠程tag):
$ git tag -d v1.1 $ git push origin :refs/tags/v1.1
16、丟棄你所有的本地改動與提交,可以到服務器上獲取最新的版本并將你本地主分支指向到它:
$ git fetch origin $ git reset --hard origin/master
17、移除所有未跟蹤文件(一般會加上參數-df,-d表示包含目錄,-f表示強制清除)
$ git clean [options]
18、多人協作的工作模式
-
首先,可以試圖用$ git push origin <branch>推送自己的修改;
-
如果推送失敗,則因為遠程分支比你的本地更新,需要先用$ git pull試圖合并;
-
如果合并有沖突,則解決沖突,并在本地提交;
-
沒有沖突或者解決掉沖突后,再用$ git push origin <branch>推送就能成功;
-
如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令$ git branch --set-upstream <branch> origin/<branch>解決即可。
19、git工作流程圖
說了這么多,來張工作圖,可能更加通俗易懂:
總結
掌握上面的命令后基本上可以輕松使用git來管理項目和參與團隊開發了,當你欣賞到git的過人和可愛之處后,你可能再也不想使用svn來管理代碼了,媽媽也不用擔心我如何使用git了,熟悉操作后你就可以遨翔于github、gitcafe、gitlab的天空,為開源生態圈貢獻自己的一份力量。不管是fork,star,clone,還是pull request,總要嘗試下未知的世界。