第一次連接遠(yuǎn)程倉庫的配置
1)配置user.name 和user.email
git config --global user.name "name"? #設(shè)置你的用戶名
git config --global user.email "emil"? #設(shè)置用戶的email賬號(hào)
2)生成密鑰
ssh-keygen -t rsa -C "your email"? #其中填的是你的注冊的github的賬號(hào),輸入之后如果不需要輸入密碼的話柜砾,連續(xù)輸入三個(gè)回車即可瞳浦,最后在你的在終端輸入 cd ~/.ssh 進(jìn)入到你的文件下可以看到有兩個(gè)文件id_rsa和id_rsa.pub,最后復(fù)制你的id_rsa.pub中的內(nèi)容到github中的賬號(hào)中即可
ssh -T git@github.com? #如果上面的步驟已經(jīng)完成了蝇完,那么就是驗(yàn)證是否完成了傻咖,輸入上述語句,如果出現(xiàn)信息解滓,那么證明說明你已經(jīng)成功了
管理修改
通常我們在提交之后會(huì)想要修改,當(dāng)然我們是在文件上直接修改值骇,但是修改后在git上輸入git status查看此時(shí)的工作區(qū)的狀態(tài),你會(huì)發(fā)現(xiàn)出現(xiàn)了出現(xiàn)了如下的語句:
從上面的提示可以看出我們有如下方案:
首先執(zhí)行 ->git add file.txt , 然后重新提交 git commit -m 'modified file.txt
撤銷修改(沒有提交的[commit])
這里的撤銷修改僅僅是對于沒有提交的撤銷(git commit -m ''),在下面會(huì)講到如何撤銷提交后的撤銷
1) 未git add
當(dāng)我們修改后會(huì)出現(xiàn)上面的提示祝懂,前面已經(jīng)貼過了,這里就不再貼代碼了祟剔,根據(jù)提示仅父,我們可以git checkout -- file.txt來丟棄工作區(qū)的修改案训,之后就可以看見先前的修改已經(jīng)不見了
2) 已經(jīng)git add
當(dāng)我們修改文件后并且git add添加到暫存區(qū)了蓉冈,那么查看狀態(tài)git status,出現(xiàn)的提示如下
根據(jù)上面提示的方法:輸入git reset HEAD file.txt,可以看到文件回到未git add的狀態(tài)了,這時(shí)如果你想要丟棄修改矩乐,使用git checkout -- file.txt,之后就可以看到你的修改已經(jīng)不見了
刪除文件
其實(shí)刪除也是一種修改操作傀蓉,我們在文件管理器中直接使用rm刪除文件繁调,這時(shí)輸入git status可以看到如下的提示:
如果你不想刪除了裕寨,想要恢復(fù)原來的文件,使用git checkout -- file.txt這個(gè)命令可以讓撤銷修改认轨,也可以撤銷刪除杉畜,起到一鍵還原的作用
如果你想要繼續(xù)刪除,那么有兩種方法:
first: git add file.txt , second: git commit -m ' '
first: git rm file.txt , second: git commit -m ' '
注意:git rm file可以用來刪除提交到版本庫中的文件,一般刪除要執(zhí)行以下命令:git rm file.txt,git commit -m 'delete'牙丽,注意在git commit之前還是可以取消刪除的,使用git checkout -- file.txt,可以一鍵取消刪除
創(chuàng)建與合并分支
1)常用命令:
git checkout -b dev? #創(chuàng)建并且切換到dev分支
git checkout dev? #切換到dev分支
git branch? #查看所有的分支遂唧,帶有*的是當(dāng)前所處的分支
git branch -d dev? #刪除dev分支,一般在合并之后刪除
git branch -D dev? #強(qiáng)制刪除分支,一般在沒有合并就刪除分支會(huì)出現(xiàn)不能刪除,這是就要使用強(qiáng)制刪除這個(gè)分支的命令
git merge dev? #將dev分支合并到當(dāng)前分支,使用到Fast forward模式,但這種模式下,刪除分支后件余,會(huì)丟掉分支信息。
git merge --no-ff -m "merge with no-ff" dev? #強(qiáng)制禁用Fast forward模式,Git就會(huì)在merge時(shí)生成一個(gè)新的commit芋齿,這樣栅炒,從分支歷史上就可以看出分支信息级历。
git log --graph --pretty=oneline --abbrev-commit? #查看分支歷史
2)創(chuàng)建合并
首先我們創(chuàng)建一個(gè)dev分支,使用命令:git checkout -b dev(創(chuàng)建一個(gè)dev分支嚼贡,并且切換到dev分支上)剩辟,我們可以使用git branch查看所有的分支
現(xiàn)在在改變之前master分支上的file.txt文件內(nèi)容吭服,之后git add file.txt,并且提交到版本庫中了(git commit -m 'file.txt'),此時(shí)使用git checkout master切換到master分支上,查看file.txt的文件內(nèi)容傻昙,可以看到里面的內(nèi)容并沒有改變,由此可知兩個(gè)分支是獨(dú)立的,如果你在一個(gè)分之上創(chuàng)建了文件并且提交到版本庫中了,切換到另外一個(gè)分支上济蝉,此時(shí)可以發(fā)現(xiàn)原來創(chuàng)建的文件不見了雁乡,因?yàn)槟鞘橇硗庖粋€(gè)分支的文件曲饱,當(dāng)然我們可以合并分支驻谆,使用git merge dev,這兩個(gè)命令將dev分支合并到當(dāng)前分支
Bug分支管理
如果正在一個(gè)分支上工作象对,另外一個(gè)分支上的程序有一個(gè)Bug需要馬上修改沥邻,但是此時(shí)這個(gè)分支上的東西還需要很長時(shí)間才能完成埃跷,這應(yīng)該怎么辦呢剪勿?難道要放棄當(dāng)前分支上的修改嗎械念?當(dāng)然不是了希停,幸好棍潘,Git還提供了一個(gè)stash功能,可以把當(dāng)前工作現(xiàn)場“儲(chǔ)藏”起來荠呐,等以后恢復(fù)現(xiàn)場后繼續(xù)工作渗钉,具體步驟如下:
git stash? #將當(dāng)前的工作狀態(tài)暫時(shí)存儲(chǔ)在stash中术徊,輸出如下信息
此時(shí)可以使用git status查看當(dāng)前的分支上的狀態(tài)窿祥,可以知道當(dāng)前的的工作區(qū)就是干凈的听系,因此可以放心的修復(fù)另外一個(gè)分支上的的Bug了
git checkout master? #切換分支陕习,修復(fù)Bug
git checkout dev? #修復(fù)好Bug繼續(xù)回到上一個(gè)分支干活
git stash list? #可以看到工作現(xiàn)場還在,輸出如下信息:
如果有多個(gè)修改的內(nèi)容土居,這里的信息肯定不止一條
git stash apply? #恢復(fù)修改,但是這只是恢復(fù)stash的內(nèi)容并不會(huì)刪除德召,這里建議使用git stash pop既恢復(fù)了又刪除了stash中內(nèi)容,注意這里只能恢復(fù)一條數(shù)據(jù)径玖,此時(shí)使用git status查看狀態(tài),可以看到已經(jīng)出現(xiàn)修改的內(nèi)容了
git stash list? #此時(shí)查看當(dāng)前stash中的內(nèi)容可以看到已經(jīng)什么都沒了年堆,當(dāng)然這只是清除一條痒蓬,如果本來有多個(gè)班挖,那么還是會(huì)有其他內(nèi)容的
常用命令
git stash? #將當(dāng)前的分支上的工作暫存到stash中
git stash list? #列出stash中的所有暫存的內(nèi)容
git stash pop? #恢復(fù)并且刪除stash中的內(nèi)容
git stash apply? #恢復(fù)但是步刪除stash中的內(nèi)容
遠(yuǎn)程倉庫的操作
1) 常用的命令
git remote -v? #查看遠(yuǎn)程倉庫的詳細(xì)信息
git remote add remote-name URL? #添加遠(yuǎn)程倉庫
git remote rename origin pb? #將遠(yuǎn)程倉庫的origin改為pb给梅,此時(shí)使用git remote 查看可以知道這里已經(jīng)沒有origin了运吓,變成了pb
git remote rm origin? #將遠(yuǎn)程倉庫origin刪除
git push origin master? #將內(nèi)容提交到遠(yuǎn)程倉庫origin的master上宅静,當(dāng)然這里亦可以使用其他的分支
git clone URL? #克隆一個(gè)遠(yuǎn)程倉庫,這里的URL是遠(yuǎn)程倉庫的地址
git pull origin? #將遠(yuǎn)程倉庫中更新的數(shù)據(jù)拉到本地
git checkout -b branch-name origin/branch-name? #在本地創(chuàng)建和遠(yuǎn)程倉庫對應(yīng)的分支,最好分支的名字相同
git push origin branch-name? #推送到遠(yuǎn)程倉庫的分支
2) 注意
同一個(gè)文件夾中可以添加很多遠(yuǎn)程倉庫旺聚,不過可以在提交的時(shí)候需要指定遠(yuǎn)程倉庫的名字织阳,比如在你的文件夾下有origin和pb兩個(gè)遠(yuǎn)程倉庫,可以使用git remote -v查看詳細(xì)的信息翻屈,此時(shí)你在版本庫中已經(jīng)有想要推送的文件了陈哑,那么使用git push origin master就可以指定推送到origin遠(yuǎn)程倉庫中
3) 實(shí)例
假如你新建一個(gè)文件夾,此時(shí)要在里面添加遠(yuǎn)程倉庫伸眶,具體實(shí)現(xiàn)如下:
git clone URL? #將一個(gè)倉庫克隆來的同時(shí)也具有推送的權(quán)限了惊窖,這時(shí)就可以使用git remote add origin URL來添加遠(yuǎn)程倉庫了
如果沒有使用clone的方法創(chuàng)建一個(gè)版本庫,那么先git init然后git remote add origin URL添加遠(yuǎn)程倉庫厘贼,之后就是將本地倉庫和遠(yuǎn)程倉庫對應(yīng)了界酒,使用git pull origin master來拉取遠(yuǎn)程倉庫中內(nèi)容,當(dāng)然這也可以分兩步嘴秸,使用如下:
git fetch origin master? #這是將遠(yuǎn)程倉庫中的文件拉取到本地毁欣,但是沒有與本地的master合并,因此本地的master分支不能追蹤遠(yuǎn)程倉庫中的分支
git merge origin/master? #將遠(yuǎn)程倉庫和本地的master分支合并岳掐,那么就可以使用本地的master分支追蹤遠(yuǎn)程倉庫了凭疮,這就完成了
無論clone還是pull都只是拉取遠(yuǎn)程的master分支,但是一般遠(yuǎn)程倉庫中還有其他的分支串述,那么怎么辦呢执解?拉取遠(yuǎn)程倉庫的次分支步驟如下:
git checkout -b dev origin/dev? #拉去遠(yuǎn)程倉庫中的dev倉庫到本地的dev分支