Git
Git是一個(gè)版本管理控制系統(tǒng)(縮寫VCS),它可以在任何時(shí)間點(diǎn),
將文檔的狀態(tài)作為更新記錄保存起來(lái),也可以在任何時(shí)間點(diǎn),將更新記錄恢復(fù)回來(lái)。
查看Git的版本
git --verson
Git 基本工作流程
Git 使用前配置
1. 配置提交人姓名:git config --global user.name “提交人姓名” # (對(duì)當(dāng)前系統(tǒng)用戶有效)
2. 配置提交人姓名:git config --global user.email ?“提交人郵箱” # (對(duì)當(dāng)前系統(tǒng)用戶有效)
????????作用:識(shí)別開發(fā)人員,與登良github的賬戶無(wú)關(guān)
3. 查看git配置信息:git config --list
注意
1.如果要對(duì)配置信息進(jìn)行修改,重復(fù)上述命令即可。
2. 配置只需要執(zhí)行一次。
常用提交步驟
1 git init ?# 初始化git倉(cāng)庫(kù)
2 git status ?# 查看文件狀態(tài)
3 git add 文件列表 # 追蹤文件
4 git commit -m ?“xxxx” ?# 向倉(cāng)庫(kù)中提交代碼(全部文件)
????????vs: git commit -m "xxxx" ?文件 ?# 提交某個(gè)文件
5 git log # 顯示所有提交記錄
?????????vs: git log --pretty=oneline ? # 一行顯示版本信息
補(bǔ)充:
git log lfa380b5O2a0Ob82bfc8d84c5ab5el5b8fbf7dac # 會(huì)顯示所有關(guān)于這個(gè)id以及之前的修改記錄
git log lfa380b5O2a0Ob82bfc8d84c5ab5el5b8fbf7dac -1 # 加上-1參數(shù)表示我們只想看到一行記錄
而如果想要查看這條提交記錄具體修改了什么內(nèi)容,可以在命令中加入p參數(shù),命令如下:
git log Ifa380b502a00b82bfc8d84c5ab5el5b8fbf7dac -1 -p
6 git reset ?--hard 版本id ?# 回退版本
7 git reflog ? # 查看所有版本信息
8 git diff ?# 表示未使用add命令時(shí)的修改
這樣可以查看到所有文件的更改內(nèi)容,
如果你只想查看MainActivity.java這個(gè)文件的更改內(nèi)容,
可以使用如下命令:
git diff app/src/main/java/com/example/providertest/MainActivity.java
vs:git log 表示最近的改變,git reflog可以看到所有的改變
如果文件未被跟蹤,即沒有使用git add這個(gè)命令時(shí),文
件為紅色,如果使用這個(gè)命令,則文件變?yōu)榫G色.?
?
Administrator@E3J6CI1HV76DS4U MINGW32/d/360MoveData/Users/Administrator/Desktop/test
$ git init
Initialized empty Git repository in D:/360MoveData/Users/Administrator/Desktop/test/.git/
Administrator@E3J6CI1HV76DS4U MINGW32/d/360MoveData/Users/Administrator/Desktop/test (master)
$ git status
On branch master
No commits yet
Untracked files:
? (use "git add <file>..." to include in what will be committed)
? ? ? ? index.html
nothing added to commit but untracked files present (use "git add" to track)
Administrator@E3J6CI1HV76DS4U MINGW32/d/Users/Administrator/Desktop/test (master)
$ git add index.html
Administrator@E3J6CI1HV76DS4U MINGW32/d/Users/Administrator/Desktop/test (master)
$ git status
On branch master
No commits yet
Changes to be committed:
? (use "git rm --cached <file>..." to unstage)
? ? ? ? new file: ? index.html
Administrator@E3J6CI1HV76DS4U MINGW32/d/Users/Administrator/Desktop/test (master)
$ git commit -m 第一次提交
[master (root-commit) 23db606] 第一次提交
?1 file changed, 0 insertions(+), 0 deletions(-)
?create mode 100644 index.html
撤銷
1 git checkout 文件
不過這種撤銷方式只適用于那些還沒有執(zhí)行過add命令的文件,如果某個(gè)文件已經(jīng)被添加過了,這種方式就無(wú)法撤銷其更改的內(nèi)容.
這種情況我們應(yīng)該先對(duì)其取消添加,然后才可以撤回提交。
取消添加使用的是reset命令,用法如下所示:
git reset HEAD app/src/main/java/com/example/providertest/MainActivity.java
然后再運(yùn)行一遍git status命令,你就會(huì)發(fā)現(xiàn)MainActivity.java這個(gè)文件重新變回了未添加狀態(tài),此時(shí)就可以使用checkout命令來(lái)將修改的內(nèi)容進(jìn)行撤銷了。
2 用暫存區(qū)中的文件覆蓋工作目錄中的文件: git checkout 文件
應(yīng)用場(chǎng)景:如果開發(fā)過程中不滿意當(dāng)前的內(nèi)容,想要后悔藥,那么可以使用這個(gè)命令從暫存區(qū)取相應(yīng)的文件來(lái)恢復(fù),使用后文件的狀態(tài)依然為綠色.
3 將文件從暫存區(qū)中刪除: git rm --cached 文件
應(yīng)用場(chǎng)景:開發(fā)過程中,不是每個(gè)文件都是有必要交給git管理的,使用這個(gè)命令可以從暫存區(qū)刪除沒用的文件,不交給git管理,此時(shí)文件在工作目錄依然存在,只是沒在暫存區(qū)而已.
4 將 git 倉(cāng)庫(kù)中指定的更新記錄恢復(fù)出來(lái),并且覆蓋暫存區(qū)和工作目錄:git reset --hard commitID
應(yīng)用場(chǎng)景:開發(fā)過程中,如果想要利用某次記錄覆蓋暫存區(qū)和工作目錄,則可以使用 上面那個(gè)命令.
?
Git進(jìn)階
分支
為了便于理解,大家暫時(shí)可以認(rèn)為分支就是當(dāng)前工作目錄中代碼的一份副本。
使用分支,可以讓我們從開發(fā)主線上分離出來(lái),以免影響開發(fā)主線。
?
分支細(xì)分
主分支(master):第一次向 git 倉(cāng)庫(kù)中提交更新記錄時(shí)自動(dòng)產(chǎn)生的一個(gè)分支。
開發(fā)分支(develop):作為開發(fā)的分支,基于 master 分支創(chuàng)建。
功能分支(feature):作為開發(fā)具體功能的分支,基于開發(fā)分支創(chuàng)建
功能分支 -> 開發(fā)分支 -> 主分支
解析:實(shí)際開發(fā)中,主分支一般來(lái)發(fā)布源碼之類,要保持穩(wěn)定,所以就出現(xiàn)了開發(fā)分支,當(dāng)開發(fā)分支弄好后在合并到主分支.
功能分支是作為開發(fā)具體功能的分支,為了保持開發(fā)分支的穩(wěn)定,當(dāng)功能分支弄好后在合并到開發(fā)分支.所以路線就是
功能分支 -> 開發(fā)分支 -> 主分支
?
分支命令
git branch ?# 查看分支
git branch 分支名稱 # 創(chuàng)建分支
git checkout 分支名稱 ?# 切換分支
注意:在切換分支的時(shí)候一定要保證當(dāng)前的內(nèi)容處于提交狀態(tài),即有使用git commit這個(gè)命令,否則切換到其他分支的時(shí)候會(huì)把切換前的分支內(nèi)容帶過去,這不是我們想要的
git merge 來(lái)源分支 # 合并分支
git branch -d 分支名稱` # 刪除分支(分支被合并后才允許刪除)(-D 強(qiáng)制刪除)
注意:如果某分支沒有合并,則該分支不可以直接被刪除,解決辦法就是把小d改為大D即可。
?
暫時(shí)保存更改
在git中,可以暫時(shí)提取分支上所有的改動(dòng)并存儲(chǔ),讓開發(fā)人員得到一個(gè)干凈的工作副本,臨時(shí)轉(zhuǎn)向其他工作。
使用場(chǎng)景:分支臨時(shí)切換
存儲(chǔ)臨時(shí)改動(dòng):git stash
恢復(fù)改動(dòng):git stash pop
應(yīng)用場(chǎng)景(分支臨時(shí)切換);開發(fā)過程中,如果老板說以前的內(nèi)容存在bug,那么你得切換分支去修改,
但你當(dāng)前的分支尚未完成,不想提交上去.即不要git commit這個(gè)命令的需求,但是又不想把切換前
的分支內(nèi)容帶過去,此時(shí)可以利用git stash(存儲(chǔ)臨時(shí)改動(dòng))這個(gè)命令,這個(gè)命令的作用就是把你當(dāng)
前分支的內(nèi)容剪切到剪貼板上,然后就可以切換分支了,雖然沒有g(shù)it commit這個(gè)命令,但狀態(tài)已
處于工作清空狀態(tài)(即暫存區(qū)跟工作目錄沒有內(nèi)容了)。
當(dāng)處理好bug之后切換到原來(lái)的分支,使用git stash pop(恢復(fù)改動(dòng))這個(gè)命令從剪貼板復(fù)制過來(lái),此時(shí)又恢復(fù)之前的狀態(tài)了。
github
在版本控制系統(tǒng)中,大約90%的操作都是在本地倉(cāng)庫(kù)中進(jìn)行的:暫存,提交,查看狀態(tài)或者歷史
記錄等等。除此之外,如果僅僅只有你一個(gè)人在這個(gè)項(xiàng)目里工作,你永遠(yuǎn)沒有機(jī)會(huì)需要設(shè)置一個(gè)遠(yuǎn)程倉(cāng)庫(kù)。
只有當(dāng)你需要和你的開發(fā)團(tuán)隊(duì)共享數(shù)據(jù)時(shí),設(shè)置一個(gè)遠(yuǎn)程倉(cāng)庫(kù)才有意義。你可以把它想象成一個(gè)
“文件管理服務(wù)器”,利用這個(gè)服務(wù)器可以與開發(fā)團(tuán)隊(duì)的其他成員進(jìn)行數(shù)據(jù)交換。
?
github解釋名詞
倉(cāng)庫(kù)(Repository)
有多少個(gè)開源項(xiàng)目,就有多少個(gè)倉(cāng)庫(kù)
收藏(Star)
即收藏人數(shù)
fork(克隆)
復(fù)制項(xiàng)目到自己的倉(cāng)庫(kù)
pull request
請(qǐng)求把改變的內(nèi)容更改到被克隆的那個(gè)遠(yuǎn)程倉(cāng)庫(kù)中
watch(關(guān)注)
通知你關(guān)注項(xiàng)目的改變
issue(事務(wù)卡片)
發(fā)現(xiàn)bug,把bug通知上去,討論協(xié)商
多人協(xié)作開發(fā)流程
合作流程
同隊(duì)開發(fā)
1.首先A方創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù),將本地倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù)
(我們本地倉(cāng)庫(kù)的版本必須大于遠(yuǎn)程倉(cāng)庫(kù)的版本,否則push失敗。),
采用git push 遠(yuǎn)程倉(cāng)庫(kù)地址 分支名稱。
git push https://github.com/yxjgithub-png/git-demo.git master # 將master分支推送到遠(yuǎn)程倉(cāng)庫(kù)。但是這里地址麻煩,可以采用步驟2添加別名
2. git remote add 遠(yuǎn)程倉(cāng)庫(kù)地址別名(可以自定義,一般為origin) ?遠(yuǎn)程倉(cāng)庫(kù)地址 # (查看當(dāng)前遠(yuǎn)程地址的別名
git remote -v )
git remote add origin https://github.com/yxjgithub-png/git-demo.git # 如果不想使用地址形式,可以采用別名來(lái)代替。如果想直接使用git push,則可以采用步驟3
3. git push -u 遠(yuǎn)程倉(cāng)庫(kù)地址別名 分支名稱
git push origin master ?# 推送遠(yuǎn)程分支
git push -u origin master # -u 記住推送地址及分支,下次推送只需要輸入git push即可.B方想加入團(tuán)隊(duì)進(jìn)行開發(fā),則需要步驟4.
解析:第一次輸入需要用戶名和密碼,以后不用,window系統(tǒng)會(huì)幫助我們記住用戶名和密碼,在那個(gè)控制面板的憑據(jù)管理器中。
4.git clone 倉(cāng)庫(kù)地址?
git clone 遠(yuǎn)程倉(cāng)庫(kù)地。B方想推送自己修改的內(nèi)容,則需要步驟5
效果:1.下載內(nèi)容到本地 2.克隆別人遠(yuǎn)程倉(cāng)庫(kù)的別名 3.初始化倉(cāng)庫(kù)
當(dāng)我們需要clone后想把內(nèi)容推送到別人的遠(yuǎn)程倉(cāng)庫(kù)時(shí),不可以直接推送,而是需要?jiǎng)e人在相應(yīng)的遠(yuǎn)程倉(cāng)庫(kù)的settings里面操作,填寫邀請(qǐng)隊(duì)友的賬號(hào)。當(dāng)我們用git clone的時(shí)候,不僅將對(duì)方的東西復(fù)制過來(lái),而且連對(duì)方遠(yuǎn)程倉(cāng)庫(kù)的別名也復(fù)制過來(lái)。
5. git push 遠(yuǎn)程倉(cāng)庫(kù)地址 推送的分支
git push origin master ?# B方想把內(nèi)容推送給A方,然后A方可以采用步驟6進(jìn)行版本的更新
git push <遠(yuǎn)程主機(jī)名> ?<本地分支名>:<遠(yuǎn)程分支名>
注意,分支推送順序的寫法是<來(lái)源地>:<目的地>,所以git pull是<遠(yuǎn)程分支>:<本地分支>,而git push是<本地分支>:<遠(yuǎn)程分支>。如果省略遠(yuǎn)程分支名,則表示將本地分支推送與之存在”追蹤關(guān)系”的遠(yuǎn)程分支(通常兩者同名),如果該遠(yuǎn)程分支不存在,則會(huì)被新建。
6.git pull
拉取遠(yuǎn)程倉(cāng)庫(kù)中最新的版本:git pull 遠(yuǎn)程倉(cāng)庫(kù)地址 遠(yuǎn)程地址分支名稱
git pull origin master # 拉取origin主機(jī)的master分支,與本地當(dāng)前分支合并
比如,要取回origin主機(jī)的next分支,與本地的master分支合并,需要寫成下面這樣 ? git pull origin next:master
如果遠(yuǎn)程分支(next)要與當(dāng)前分支合并,則冒號(hào)后面的部分可以省略。上面命令可以簡(jiǎn)寫為:git pull origin next
git clone 跟 git pull的區(qū)別
git clone是在沒有本地倉(cāng)庫(kù)的基礎(chǔ)上clone別人的東西,而git pull則是在有本地倉(cāng)庫(kù)的基礎(chǔ)上拉取代碼到本地。git clone
只是第一次參與開發(fā)時(shí)用,以后都是用git pull命令
解決沖突
在多人同時(shí)開發(fā)一個(gè)項(xiàng)目時(shí),如果兩個(gè)人修改了同一個(gè)文件的同一個(gè)地方,就會(huì)發(fā)生沖突。沖突需要人為解決。
先把遠(yuǎn)程倉(cāng)庫(kù)pull下來(lái),然后刪除沖突的標(biāo)記,再做相應(yīng)的修改即可。然后git add,git commit,git push上去。
跨團(tuán)隊(duì)協(xié)作
1. 程序員 C fork倉(cāng)庫(kù):把對(duì)方遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容復(fù)制到自己的遠(yuǎn)程倉(cāng)庫(kù)
2. 程序員 C 將遠(yuǎn)程倉(cāng)庫(kù)克隆在本地進(jìn)行修改
3. 程序員 C 將倉(cāng)庫(kù)推送到自己的遠(yuǎn)程倉(cāng)庫(kù)
4. 程序員 C如果想要把修改內(nèi)容發(fā)給對(duì)方,則需要點(diǎn)擊pull request命令
5. 然后等待原遠(yuǎn)程倉(cāng)庫(kù)作者審核
6. 原遠(yuǎn)程倉(cāng)庫(kù)作者合并代碼即可
?
ssh免登陸
生成秘鑰:ssh-keygen
秘鑰存儲(chǔ)目錄:C:\Users\用戶\\.ssh
公鑰名稱:id_rsa.pub
私鑰名稱:id_rsa
解析:使用ssh-keygen命令,然后生成秘鑰,私鑰保存在自己的電腦中,公鑰發(fā)布在自己的遠(yuǎn)程倉(cāng)庫(kù)中(在settings中找到設(shè)置ssh的地方,將公鑰的內(nèi)容復(fù)制到那里),然后復(fù)制相應(yīng)倉(cāng)庫(kù)的ssh地址,然后正常操作就可以實(shí)現(xiàn)免密碼登錄。
?
GIT忽略清單
將不需要被git管理的文件名字添加到.gitignore中,
在執(zhí)行g(shù)it命令的時(shí)候,git就會(huì)忽略這些文件。
將工作目錄中的文件全部添加到暫存區(qū):git add .
bug
idea提交項(xiàng)目到github
提交到遠(yuǎn)程庫(kù)錯(cuò)誤:Push to origin/master was rejected
解決方案:git pull origin(遠(yuǎn)程倉(cāng)庫(kù)的地址) master --allow-unrelated-histories
?
Github搜索技巧
in:name Vue # 搜索項(xiàng)目名包含Vue的項(xiàng)目
in:name Vue ?stars:>5000 # 搜索Vue項(xiàng)目的star數(shù)大于5000?
in:name Vue stars:>5000 forks:>5000 # 搜索Vue項(xiàng)目的star數(shù)大于5000 并且 forks:>5000
in:readme Vue # 搜索README.md里面包含Vue的項(xiàng)目
in:descrition Vue # 搜索項(xiàng)目描述包含Vue的項(xiàng)目
language:java ?# 搜索語(yǔ)言為java的項(xiàng)目
pushed:>2020-01-02 # 搜索項(xiàng)目最后更新時(shí)間大于2020-01-02的項(xiàng)目
?
圖片總結(jié)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-763915.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-763915.html
到了這里,關(guān)于Git 版本控制系統(tǒng)(尚硅谷)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!