git常用操作
第一次連接遠程倉庫的配置
配置user.name 和user.email
git config --global user.name "name"
設(shè)置你的用戶名git config --global user.email "emil"
設(shè)置用戶的email賬號
生成密鑰
ssh-keygen -t rsa -C "your email"
其中填的是你的注冊的github
的賬號彭则,輸入之后如果不需要輸入密碼的話鳍刷,連續(xù)輸入三個回車即可,最后在你的在終端輸入 cd ~/.ssh 進入到你的文件下可以看到有兩個文件id_rsa
和id_rsa.pub
,最后復(fù)制你的id_rsa.pub
中的內(nèi)容到github
中的賬號中即可ssh -T git@github.com
如果上面的步驟已經(jīng)完成了俯抖,那么就是驗證是否完成了输瓜,輸入上述語句,如果出現(xiàn)信息芬萍,那么證明說明你已經(jīng)成功了
管理修改
通常我們在提交之后會想要修改尤揣,當(dāng)然我們是在文件上直接修改,但是修改后在
git
上輸入git status
查看此時的工作區(qū)的狀態(tài)柬祠,你會發(fā)現(xiàn)出現(xiàn)了出現(xiàn)了如下的語句:
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: file.txt
no changes added to commit (use "git add" and/or "git commit -a")
從上面的提示可以看出我們有如下方案:
- 首先執(zhí)行->
git add file.txt
,然后重新提交git commit -m 'modified file.txt
撤銷修改(沒有提交的[commit
])
這里的撤銷修改僅僅是對于沒有提交的撤銷(
git commit -m ''
),在下面會講到如何撤銷提交后的撤銷
未git add
當(dāng)我們修改后會出現(xiàn)上面的提示北戏,前面已經(jīng)貼過了,這里就不再貼代碼了漫蛔,根據(jù)提示嗜愈,我們可以
git checkout -- file.txt
來丟棄工作區(qū)的修改,之后就可以看見先前的修改已經(jīng)不見了
已經(jīng)git add
當(dāng)我們修改文件后并且
git add
添加到暫存區(qū)了莽龟,那么查看狀態(tài)git status
,出現(xiàn)的提示如下
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: file.txt
根據(jù)上面提示的方法:輸入
git reset HEAD file.txt
,可以看到文件回到未git add
的狀態(tài)了蠕嫁,這時如果你想要丟棄修改,使用git checkout -- file.txt
,之后就可以看到你的修改已經(jīng)不見了
刪除文件
其實刪除也是一種修改操作毯盈,我們在文件管理器中直接使用
rm
刪除文件剃毒,這時輸入git status
可以看到如下的提示:
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: file.txt
no changes added to commit (use "git add" and/or "git commit -a")
PS G:\file> git checkout -- file.txt
- 如果你不想刪除了,想要恢復(fù)原來的文件,使用
git checkout -- file.txt
這個命令可以讓撤銷修改赘阀,也可以撤銷刪除陪拘,起到一鍵還原的作用
- 如果你想要繼續(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)建與合并分支
常用命令:
git checkout -b dev
創(chuàng)建并且切換到dev
分支git checkout dev
切換到dev
分支git branch
查看所有的分支酌媒,帶有*
的是當(dāng)前所處的分支git branch -d dev
刪除dev
分支欠痴,一般在合并之后刪除git branch -D dev
:強制刪除分支,一般在沒有合并就刪除分支會出現(xiàn)不能刪除秒咨,這是就要使用強制刪除這個分支的命令git merge dev
將dev
分支合并到當(dāng)前分支,使用到Fast forward
模式喇辽,但這種模式下,刪除分支后雨席,會丟掉分支信息菩咨。git merge --no-ff -m "merge with no-ff" dev
強制禁用Fast forward
模式,Git
就會在merge
時生成一個新的commit
陡厘,這樣抽米,從分支歷史上就可以看出分支信息。
git log --graph --pretty=oneline --abbrev-commit
查看分支歷史
創(chuàng)建合并
- 首先我們創(chuàng)建一個
dev
分支,使用命令:git checkout -b dev
(創(chuàng)建一個dev
分支糙置,并且切換到dev
分支上)云茸,我們可以使用git branch
查看所有的分支
- 現(xiàn)在在改變之前
master
分支上的file.txt
文件內(nèi)容,之后git add file.txt
,并且提交到版本庫中了(git commit -m 'file.txt'
)谤饭,此時使用git checkout master
切換到master
分支上标捺,查看file.txt
的文件內(nèi)容,可以看到里面的內(nèi)容并沒有改變揉抵,由此可知兩個分支是獨立的亡容,如果你在一個分之上創(chuàng)建了文件并且提交到版本庫中了,切換到另外一個分支上冤今,此時可以發(fā)現(xiàn)原來創(chuàng)建的文件不見了闺兢,因為那是另外一個分支的文件,當(dāng)然我們可以合并分支辟汰,使用git merge dev
,這兩個命令將dev
分支合并到當(dāng)前分支**
Bug分支管理
如果正在一個分支上工作列敲,另外一個分支上的程序有一個Bug需要馬上修改,但是此時這個分支上的東西還需要很長時間才能完成帖汞,這應(yīng)該怎么辦呢戴而?難道要放棄當(dāng)前分支上的修改嗎?當(dāng)然不是了翩蘸,幸好所意,Git還提供了一個stash功能,可以把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作扶踊,具體步驟如下:
- git stash 將當(dāng)前的工作狀態(tài)暫時存儲在stash中泄鹏,輸出如下信息
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge
- 此時可以使用
git status
查看當(dāng)前的分支上的狀態(tài),可以知道當(dāng)前的的工作區(qū)就是干凈的秧耗,因此可以放心的修復(fù)另外一個分支上的的Bug
了
git checkout master
切換分支备籽,修復(fù)Bug
git checkout dev
修復(fù)好Bug繼續(xù)回到上一個分支干活
git stash list
可以看到工作現(xiàn)場還在,輸出如下信息:
stash@{0}: WIP on dev: 6224937 add merge
如果有多個修改的內(nèi)容分井,這里的信息肯定不止一條
git stash apply
:恢復(fù)修改车猬,但是這只是恢復(fù)stash
的內(nèi)容并不會刪除,這里建議使用git stash pop
既恢復(fù)了又刪除了stash
中內(nèi)容尺锚,注意這里只能恢復(fù)一條數(shù)據(jù)珠闰,此時使用git status
查看狀態(tài),可以看到已經(jīng)出現(xiàn)修改的內(nèi)容了
git stash list
:此時查看當(dāng)前stash
中的內(nèi)容可以看到已經(jīng)什么都沒了瘫辩,當(dāng)然這只是清除一條伏嗜,如果本來有多個,那么還是會有其他內(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)容
遠程倉庫的操作
常用的命令
git remote -v
查看遠程倉庫的詳細(xì)信息
git remote add remote-name URL
添加遠程倉庫
git remote rename origin pb
將遠程倉庫的origin改為pb伐厌,此時使用git remote 查看可以知道這里已經(jīng)沒有origin了承绸,變成了pb
git remote rm origin
將遠程倉庫origin刪除
git push origin master
將內(nèi)容提交到遠程倉庫origin的master上奉芦,當(dāng)然這里亦可以使用其他的分支
git clone URL
克隆一個遠程倉庫,這里的URL是遠程倉庫的地址
git pull origin
將遠程倉庫中更新的數(shù)據(jù)拉到本地
git checkout -b branch-name origin/branch-name
在本地創(chuàng)建和遠程倉庫對應(yīng)的分支韩肝,最好分支的名字相同
git push origin branch-name
推送到遠程倉庫的分支
注意
同一個文件夾中可以添加很多遠程倉庫粪薛,不過可以在提交的時候需要指定遠程倉庫的名字,比如在你的文件夾下有origin和pb兩個遠程倉庫墩剖,可以使用git remote -v查看詳細(xì)的信息,此時你在版本庫中已經(jīng)有想要推送的文件了,那么使用git push origin master就可以指定推送到origin遠程倉庫中
實例
假如你新建一個文件夾画饥,此時要在里面添加遠程倉庫,具體實現(xiàn)如下:
git clone URL
將一個倉庫克隆來的同時也具有推送的權(quán)限了浊猾,這時就可以使用git remote add origin URL
來添加遠程倉庫了
- 如果沒有使用
clone
的方法創(chuàng)建一個版本庫抖甘,那么先git init
然后git remote add origin URL
添加遠程倉庫,之后就是將本地倉庫和遠程倉庫對應(yīng)了葫慎,使用git pull origin master
來拉取遠程倉庫中內(nèi)容衔彻,當(dāng)然這也可以分兩步,使用如下:
git fetch origin master
這是將遠程倉庫中的文件拉取到本地偷办,但是沒有與本地的master
合并艰额,因此本地的master
分支不能追蹤遠程倉庫中的分支
git merge origin/master
將遠程倉庫和本地的master
分支合并,那么就可以使用本地的master
分支追蹤遠程倉庫了椒涯,這就完成了
- 無論
clone
還是pull
都只是拉取遠程的master
分支柄沮,但是一般遠程倉庫中還有其他的分支,那么怎么辦呢?拉取遠程倉庫的次分支步驟如下:
git checkout -b dev origin/dev
拉去遠程倉庫中的dev
倉庫到本地的dev
分支