Git 簡(jiǎn)介
- 一個(gè)開(kāi)源的分布式版本控制系統(tǒng)
- 版本控制饲漾?比如我在
A1
贫堰,A2
,A3
死陆,A4
處分別修改了文件次慢,那我可以隨時(shí)隨地回到任意AX
處
Git 安裝和配置(windows)
- 下載安裝exe,官網(wǎng)太慢翔曲,所以建議用淘寶鏡像
- 安裝完畢,找到
Git -> Git Bash
劈愚,打開(kāi) - 全局配置用戶名和郵箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
- 局部配置把
--global
去掉即可
Git 的 工作區(qū) 瞳遍、 暫存區(qū)、 master
工作區(qū)即打代碼的地方菌羽,暫存區(qū)又叫stage掠械,index用來(lái)暫時(shí)存放工作區(qū)中修改的內(nèi)容,就是一個(gè)中轉(zhuǎn)站注祖,master是項(xiàng)目主分支猾蒂,HEAD是指針
我最常用的命令
git add .
git commit -m 'update'
git push origin master
git fetch origin master
如果 fetch 合并遠(yuǎn)程庫(kù)報(bào)錯(cuò),提示 error: Your local changes to the following files would be overwritten by merge
說(shuō)明文件有改變是晨,解決:
- 如果想改變本地庫(kù)肚菠,保留遠(yuǎn)程庫(kù),執(zhí)行
$ git reset --head
罩缴,徹底回退上一個(gè)版本蚊逢,使用$ git pull
將遠(yuǎn)程庫(kù)覆蓋本地庫(kù) -
(未測(cè)試過(guò))如果想保留遠(yuǎn)程庫(kù)的修改,只將本地庫(kù)的新內(nèi)容添加至遠(yuǎn)程庫(kù)箫章,執(zhí)行
$ git stash烙荷,$ git pull,$ git stash pop
Git 常用命令
文件夾中打開(kāi)Git方式: 文件夾中右鍵 -> Git Bash Here
-
初始化
-
$ git init
初始化檬寂,將這個(gè)目錄變成Git可管理的倉(cāng)庫(kù) 终抽,.git文件夾 - 用來(lái)跟蹤管理版本庫(kù) - 注 ?windows系統(tǒng)自帶的記事本在開(kāi)頭添加了0xefbbbf字符(16進(jìn)制字符),所以網(wǎng)頁(yè)打開(kāi)第一行可能會(huì)顯示一個(gè) '?' ,所以能不用盡量別用
-
-
增加昼伴、刪除文件
-
$ git add [file1] [file2]
添加指定文件到暫存區(qū) -
$ git add [dir]
添加指定目錄到暫存區(qū) ( 包括子目錄 ) -
$ git add .
添加修改和新建的文件到暫存區(qū)匾旭,但不包括被刪除的文件 -
$ git add -u
更新所有變化的文件,即提交工作區(qū)所有變化的文件到暫存區(qū) -
$ git add -A
提交已被修改和已被刪除的文件亩码,但不包括新的文件 -
$ git rm [file1] [file2]
刪除工作區(qū)文件季率,并把它放入暫存區(qū) -
$ git rm --cached [file]
停止跟蹤指定文件,該文件在工作區(qū)位置不變 -
$ git mv [file] [file-rename]
重命名文件描沟,并把改名操作放入暫存區(qū)
-
-
提交
-
$ git commit [file1] [file2] -m "message"
提交暫存區(qū)中指定文件到倉(cāng)庫(kù)中 -
$ git commit -m "message"
提交暫存區(qū)所有內(nèi)容至倉(cāng)庫(kù)中 -
$ git commit -a
提交工作區(qū)自上一次commit以后的變化文件飒泻,至倉(cāng)庫(kù)中 -
$ git commit --amend -m "message"
用新的commit,替代上一次提交和提交信息 -
$git commit -v
提交時(shí)顯示diff(文件差異)信息
-
-
分支
-
$ git branch
顯示分支列表和當(dāng)前分支(帶*
號(hào)的) -
$ git branch -a
顯示本地分支列表和遠(yuǎn)程分支列表和當(dāng)前分支(帶*
號(hào)的) -
$ git branch [branch]
新建分支 -
$ git checkout [branch]
切換分支 -
$ git checkout -b [branch]
新建并切換分支 -
$ git checkout -
切換至上一個(gè)分支 -
$ git merge [branch]
合并指定分支到當(dāng)前分支 -
$ git merge --no-ff -m "message" [branch]
用普通模式合并吏廉,合并后的歷史中有分支信息泞遗,而fast forward ( 默認(rèn) ) 合并在歷史中是看不出曾經(jīng)做過(guò)合并 -
$ git branch -d [branch]
刪除一個(gè)分支 -
$ git rebase
作用 : 使提交歷史干凈,整潔
-
合并分支時(shí)席覆,如果沒(méi)有文件沖突可正常合并史辙,如果有沖突文件(比如兩個(gè)一樣的),Git會(huì)告訴我們佩伤,Automatic merge failed; fix conflicts and then commit the result
文件合并沖突聊倔,必須手動(dòng)解決以后再提交,這時(shí)在Git會(huì)在文檔中用<<<<<<<生巡,=======耙蔑,>>>>>>>標(biāo)記出不同分支的內(nèi)容,孤荣,修改時(shí)注意他們只能留一個(gè)甸陌,箭頭和等號(hào)要?jiǎng)h除。然后提交盐股,合并完成钱豁。
- 撤銷
-
$ git checkout [file]
撤掉暫存區(qū)指定文件到工作區(qū) -
$ git checkout .
撤銷暫存區(qū)所有文件到工作區(qū) -
$ git reset [file]
重置暫存區(qū)指定文件,與上一次commit一致疯汁,但工作區(qū)不變 -
$ git reset --hard
重置暫存區(qū)與工作區(qū)牲尺,與上一次commit一致 -
$ git reset --hard [HEAD]
回退到某個(gè)版本,同時(shí)也會(huì)重置暫存區(qū)和工作區(qū)幌蚊,HEAD代表指針秸谢,其值可以是,HEAD^
上一個(gè)版本霹肝,HEAD^^
上兩個(gè)版本估蹄, ... ,HEAD~100
上100個(gè)版本沫换,或者指定版本號(hào)8817bcf
-
$ git stash
用于保存工作進(jìn)度臭蚁,暫存區(qū)和工作區(qū)的改動(dòng)將保存起來(lái)最铁,當(dāng)前將是一個(gè)干凈的工作區(qū),比如用于修復(fù)bug時(shí)垮兑,把文件先保存起來(lái)冷尉,這時(shí)可以在另外的分支或當(dāng)前分支處理bug -
$ git stash list
查看stash隊(duì)列 -
$ git stash apply
恢復(fù)隊(duì)列中第一個(gè)記錄$ git stash drop
刪除stash里的內(nèi)容$ git stash pop
恢復(fù)并stash里的內(nèi)容 -
$ git stash apply [stash]
恢復(fù)指定的記錄,可以在列表中查看系枪,比如:stash@[0]
雀哨,把apply
換成pop
可以恢復(fù)并刪除
-
當(dāng)你改亂了工作區(qū)某個(gè)文件時(shí),想要撤銷修改可使用 $ git checkout [file]
當(dāng)你不但改亂了工作區(qū)某個(gè)文件私爷,還添加到了暫存區(qū)時(shí)雾棺,想要撤銷時(shí)分兩步,重置暫存區(qū)文件 $ git reset [file]
衬浑,撤銷工作區(qū)修改$ git checkout [file]
捌浩,或者一步到位重置暫存區(qū)與工作區(qū) $ git reset --hard
當(dāng)你改亂了,還添加到暫存區(qū)工秩,還提交到倉(cāng)庫(kù)了尸饺,想要撤銷需要使用版本回退,比如回退到上一個(gè)版本 $ git reset --hard HEAD^
-
查看信息
-
$ git status
獲取倉(cāng)庫(kù)當(dāng)前狀態(tài) -
$ git log
查看當(dāng)前分支的版本歷史 -
$ git reflog
查看所有版本號(hào)助币,由此可以穿梭未來(lái)浪听,回到過(guò)去 -
$ git log -S [keyword]
根據(jù)關(guān)鍵詞,搜索提交歷史 -
$ git log -[n] --pretty --oneline
以簡(jiǎn)寫的形式顯示過(guò)去n次的提交信息眉菱,顯示所有去掉-[n]
迹栓,顯示完整的版本號(hào)--pretty=oneline
-
$ git diff
顯示暫存區(qū)和工作區(qū)的代碼差異
-
-
遠(yuǎn)程倉(cāng)庫(kù)
-
$ git remote
查看遠(yuǎn)程庫(kù)信息,后面加-v
查看詳細(xì)信息 -
$ git remote add origin git@github.com:username/projectname.git
把本地項(xiàng)目與遠(yuǎn)程項(xiàng)目關(guān)聯(lián) -
$ git push origin [branch-name]
把本地項(xiàng)目推送至遠(yuǎn)程項(xiàng)目對(duì)應(yīng)的分支上倍谜,origin是默認(rèn)的主機(jī)名,第一次使用會(huì)提示驗(yàn)證叉抡,輸入yes即可 -
$ git push origin --delete [branch]
刪除遠(yuǎn)程分支 -
$ git clone git@github.com:username/projectname.git
把遠(yuǎn)程項(xiàng)目克隆至本地尔崔,git支持多種協(xié)議,默認(rèn)的git://使用ssh協(xié)議褥民,也可使用https協(xié)議季春,但傳輸速度要慢 -
$ git checkout -b [branch-name] origin/[branch-name]
在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支,使用時(shí)消返,本地和遠(yuǎn)程分支的名稱最好一致 - 如果與遠(yuǎn)程庫(kù)相連载弄? 1. 在 c盤 -> user > .ssh > 找到 id_rsa.pub 這是公鑰,還有一個(gè)是秘鑰撵颊,右鍵記事本打開(kāi)復(fù)制宇攻,粘貼到 github -> 設(shè)置 -> ssh key -> 新建一個(gè) 名稱隨意,內(nèi)容粘貼倡勇。如果沒(méi)有秘鑰使用
$ ssh-keygen -t rsa -C 'YourEmail@example.com'
生成逞刷,再?zèng)]有卸載Git重裝 2. 項(xiàng)目關(guān)聯(lián)或者克隆隨意 3. 公鑰的位置要在環(huán)境變量中配置好才能生效,所以生成秘鑰最好在默認(rèn)的位置。 - 關(guān)聯(lián)失斂淝场仑最? 可能是遠(yuǎn)程庫(kù)創(chuàng)建時(shí)生成了RENAME文件造成內(nèi)容與本地庫(kù)不符,使用
$ git pull origin master
抓取遠(yuǎn)程庫(kù)與本地庫(kù)同步 - 一個(gè)項(xiàng)目關(guān)聯(lián) github 和 gitee 帆喇? 先把公鑰配置好警医,然后刪除現(xiàn)有的origin的遠(yuǎn)程庫(kù)
$ git remote rm origin
,再使用$ git remote add origin git@github.com:username/projectname.git
分別連接 github 和 gitee 坯钦,修改origin
為 github 執(zhí)行一次预皇,再修改為origin
為 gitee 再執(zhí)行一次,查看$ git remote -v
時(shí)可以看到有兩個(gè)遠(yuǎn)程庫(kù)葫笼,推送時(shí)需要給定特殊的名稱深啤,ex:$ git push github master
-