Git:git是一款開源的分佈式的版本控制軟件html
Github:是一個基於git的面向開源及私有軟件項目的託管平臺java
因僅支持git 做爲惟一的版本庫格式進行託管 故名gihubmysql
①Git從服務器上克隆完整的項目到本機,至關於每個開發者都擁有一個項目的完整版本git
②開發者在本身的機器上建立分支,修改代碼.github
③將本身本地建立的分支提交到本地的版本庫sql
④在單機上合併分支數據庫
⑤新建一個分支,把服務器上的最新版的代碼fetch下來,而後跟本身的主分支合併vim
⑥Git最大的亮點在於分支的管理.緩存
這種方法是工程圖(engineering drawings)維護(maintenance)的標準作法, 它伴隨着工程圖從圖的誕生一直到圖的定型。 一種簡單的版本控制形式,例如,賦給圖的第一版一個版本等級「A」。當作了第一次改變後,版本等級改成「B」,以此類推等等.bash
現實開發中最麻煩的是多人開發中的版本控制,若是未引入版本控制的概念,咱們服務器上僅存在一個咱們從最初開始開發的項目,咱們每一次的增刪改也是在這個項目之上,因此若是某一個開發者提交了帶有bug的代碼,或者對這個已經存在的項目進行更新操做,若是更新失敗,則這個項目就廢棄了
一個項目若是有多我的開發,開發人員A,B,C,分別對項目中的同一代碼進行了修改,那後一次提交的人的代碼,就會覆蓋前一我的的代碼
集中式版本控制系統(Centralized Version Control Systems,簡稱 CVCS),版本庫是集中存放在中央服務器的,而幹活的時候,用的都是本身的電腦,因此要先從中央服務器取得最新的版本,而後開始幹活,幹完活了,再把本身的活推送給中央服務器
這麼作最顯而易見的缺點是中央服務器的單點故障。若是維修一小時,那麼在這一小時內,誰都沒法提交更新,也就沒法協同工做。若是中心數據庫所在的磁盤發生損壞,又沒有作恰當備份,毫無疑問你將丟失全部數據——包括項目的整個變動歷史.
分佈式,當咱們鏈接共享版本庫時,能夠先將服務器上的項目,克隆到本地,至關於每一臺電腦上都有整個項目的文件備份,在沒有網時也能夠開發,完成開發後,能夠先提交到本地倉庫,當有網的時候,再提交到共享版本庫,這樣一來,若是咱們的服務器或者咱們本身的電腦出故障,咱們也沒有任何擔憂
①下載軟件https://git-scm.com/官網地址
②進行安裝
最重要的一步,其它能夠直接走默認
選擇這一步能夠直接將咱們的git命令,添加到系統變量中
git help
若是向對某個具體的命令獲取幫助,可使用 git help <verb>
多人開發的項目中,經過設置的用戶名來區分開發者,設置email來聯繫開發者
先建立一個本地版本庫
在配置當前項目的用戶信息時,須要進入git管理的項目中來進行設置
1.配置用戶名:Git config user.name 「用戶名」 用來區分誰開發的代碼
2.配置郵箱信息:git config uer.eamil 「郵箱」 多是多個國家的開發者,便於聯繫開發者
配置之後會能夠在隱藏的.git文件夾的config文件中查看到,
也可使用git config –list進行查看
1.配置用戶名:git - -global config user.name 「用戶名」 用來區分誰開發的代碼
2.配置郵箱信息:git - -global config uer.eamil 「郵箱」 多是多個國家的開發者,便於聯繫開發者
能夠在C:\Users\Administrator\.gitconfig中查看
①建立文件夾E:\Mygit
②初始化倉庫:
進入咱們建立的文件夾 cd e:\Mygit ,使用命令 git init進行初始化倉庫
這時候會在當前文件夾下建立一個.git隱藏文件夾,.git文件夾是咱們的倉庫信息,必定不要修改
③對倉庫信息進行配置,主要是設置user.name和user.email,若是設置了全局的用戶信息,能夠忽略
在倉庫中添加一個hello.java的文件
① 查詢倉庫的狀態:git status
② 將文件加入到暫存區:git add 文件名
使用git status 再次查詢出文件的狀態
如今的文件並無真正的提交到主分支上(主分支就是咱們真正要運行的程序的全部代碼).
③ 提交到本地版本庫:git commit –m」註釋信息」
git commit -m"建立一個java文件"
此時文件就被提交到了主分支上
查詢指定文件的日誌記錄:git log 文件名 若是出現end 使用q退出
74d914fdda87ba20f52b907413fb7eb3a29973de是咱們的版本號
總結:
每一次修改或者建立新文件時,都須要先使用 git add 文件名 的命令來將文件添加到緩存區,再使用git commit –m 「註釋信息」 來將咱們的文件添加到版本庫
或者使用簡化命令 git commit –a –m」註釋信息」 來將咱們的文件添加到版本庫
Git 如何管理修改的文件
① 將咱們以前建立的Hello.java文件進行修改
查詢當前倉庫狀態 git status
以上看到git的一個建議
(use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) |
咱們能夠選擇git add進行添加到緩存,或者咱們可使用git checkout進行恢復
使用 git diff HEAD Hello.java能夠查看咱們對文件具體作了哪些修改
② 使用git add 文件名,將文件加入到緩存
③ 使用git commit –m」註釋信息」 提交到本地版本庫
若是進行了vim編輯器,首先Esc退出輸入狀態,而後Shift+;,再輸入q!或wq!(不保存改動,wq!是保存文件的寫入修改)退出
工做區:包含.git文件夾的文件夾(除了.git文件夾)
倉庫:也稱爲版本庫,這個不算工做區
暫存區:.git版本庫中有不少東西,包括重要要的稱爲stage 的暫存區,還有git爲用戶
自動建立的主程序分支master,以及指向master的HEAD指針,HEAD指針永遠指向咱們當前項目的最高版本
這個就像咱們以前學習的mysql數據庫中的事務同樣,使用insert 增長了,可是沒有使用commit是不會成功的
當使用commit後,會清空暫存區的內容
咱們每次提交代碼後,都會生成一個40位的哈希值, 能夠成爲commit id
使用git log來查看咱們的提交記錄
可使用git show +版本號來查看修改 此版本號的修改內容
使用git reset - - hard HAED~1 或使用git reset - - hard HEAD^
①查詢當前的日誌信息 git reflog
Git log 和git reflog的區別:
git log只會查詢歷史有效版本的版本號
git reflog 會查詢歷史全部版本的版本號,包括已經廢棄的
②找到想要恢復的版本號 使用 git reset –hard 版本號,進行恢復到指定版本
可使用 gid checkout - - Hello.java 與本地倉庫中進行對比,同步
切記用於恢復文件時,文件名前面有--
可使用 git reset HEAD Hello.java 將暫存區的內容恢復到了工做區
若是文件有錯誤,想恢復到上一次提交,還能夠直接使用gid checkout - - Hello.java進行恢復
①.從磁盤上刪除文件
仍是可使用git恢復的命令進行恢復
若是使用
刪除文件,git rm <filename>
刪除文件夾,git rm –r <文件夾名>
同時時候git commit時本地倉庫中的文才會刪除
使用git bash生成
Ssh-keygen –t rsa –c 429189785@qq.com
會生成兩個文件
id_rsa –私鑰
id_rsa.pub ---公鑰
在github 的setting中選擇SSH Keys 進行添加
將公鑰的內容,粘貼進去
①將本地已有倉庫與遠程倉庫相關聯
使用命令 git remote add origin https://github.com/zhaoqinrong/admin.git
Git remote add origin+遠程倉庫地址
可是目前爲止,遠程倉庫中沒有咱們本地倉庫的內容
②將本地全部內容,提交到遠程倉庫
使用命令git push –u origin master
會提示輸入github的用戶名和密碼
因爲是第一次推送,並且推送的爲master分支,就會使用」-u」的參數將遠程master與本地master進行關聯
④ 修改本地文件後,提交到本地版本庫add 和commit命令
⑤ 推送到遠程倉庫 git push
將遠程版本庫克隆到本地
① ,在github上創建倉庫,並進行初始化
勾選Initialize this repository with a README初始化這個倉庫
② 克隆遠程倉庫
點擊Clone or download,將倉庫的地址複製下來
使用git clone +遠程倉庫地址,對遠程倉庫進行克隆
這樣就克隆下來了
③ 在咱們克隆的倉庫中進行項目的開發,這裏咱們新建一個hello.java的文件 並使用add和commit命令進行本地版本庫的提交
④ 使用git push –u origin master 進行推送 Master爲分支名
① 找到須要克隆的開源項目的地址,而後fork到本身的遠程倉庫
② 複製本身倉庫中這個項目的地址
③ 使用 命令
Git clone +遠程倉庫地址 進行克隆
①遠程倉庫與本地倉庫進行關聯
要向從遠程倉庫中獲取更新,必須先將本地倉庫與遠程倉庫進行關聯,可使用
git remote add origin https://github.com/zhaoqinrong/Mygit
可使用命令git remote rm origin刪除關聯的遠程倉庫
使用git remote show origin來查看ms遠程倉庫的具體分支
使用git remote –v 來查看與當前本地倉庫相關聯的遠程倉庫
origin爲咱們爲遠程倉庫起的別名
③ 使用git pull origin master進行獲取併合併到本地倉庫
若是直接使用git pull能夠會出錯,建議先git fetch到本地,而後使用git merge 合併
咱們編寫項目後,須要將咱們的項目推送到遠程倉庫
可使用git push <url> <本地分支名>
① 遠程倉庫與本地倉庫進行關聯
② 推送更新
建議咱們推送更新前都先使用pull獲取遠程倉庫中的更新,而後在push推送
Ms 是咱們遠程倉庫的一個別名,咱們自定義
可使用git push ms master:mygit-1
將本地的master分支推送到ms遠程倉庫的mygit-1分支中
①先要將本地倉庫和遠程倉庫進行關聯
進入到咱們的git命令行頁面後,先將遠程代碼pull到本地,保持本地倉庫跟遠端倉庫同步。
④ 使用git rm 文件名 刪除 文件
⑤ ,進行提交(和數據庫事務同樣,提交後纔會處理)
⑥ 向遠程倉庫進行推送
Master 主分支,主要做爲程序的發佈
因此不能在master上進行開發,因此應該創建子分支進行開發
①在沒有分支的狀況下,Master指針永遠指向當前的最高版本
而head指針指向master
|
② 建立了新分支,HEAD指向了
|
|
|
|
③ 主分支和子分支進行合併
|
|
|
①建立分支:
使用命令 git branch + 分支名
使用git branch 查看當前項目的分支
⑦ 切換分支 使用命令 git checkout +分支名
⑧ 使用命令git checkout +分支名 切換到主分支,而後刪除分支 使用命令 git branch –d +分支名
注意:要刪除分支,必需要先切換到主分支
可使用 git checkout –b +分支名 建立並切換分支
分支上的文件是相互獨立的,修改文件不會影響
模擬:創建兩個分支,並分別進行推送
先鏈接遠程倉庫 git remote set-url origin https://github.com/zhaoqinrong/mygithub.git
而後分別推送分支 git push origin master git push origin brh
推送成功後能夠在咱們github上進行查看
①切換回主分支git checkout master
② 合併分支git merge brh(子分支名)
③,刪除子分支 git branch -d brh
③ 推送到遠程倉庫 git push origin master
如今在本地沒有brh的子分支,可是遠程倉庫中的子分支還在
④刪除遠程子分支git push origin –delete brh(子分支名稱)
刪除本地分支:git branch –d <branch-name>
刪除遠程分支: git push origin –delete <branchName>
git fetch origin master
git merge origin/master
代碼衝突如何產生的:
當咱們在分支上進行開發的時候,不免遇到別的開發人員和咱們本身向倉庫中提交相同的代碼
好比咱們有一個商城的項目,開發人員A和開發人員B都對同一段代碼作了修改,當A進行提交後並push到遠程倉庫中master合併,B再進行提交併與遠程倉庫中的master進行合併
這時候就會出現代碼衝突
如今咱們來模擬一下代碼衝突,並試圖解決
① 在E盤新建文件夾 GitConflict,並初始化倉庫git init
② 在工做區建立名爲Conflict.txt的文件,並寫上hello git
③ 把文件提交到本地倉庫
④ 建立新分支,名爲Conflict並切換
⑤ 在conflict分支下對Conflict.txt文件進行修改
⑥ 而後在conflict分支下進行提交
⑦,切換到主分支
⑧ 再次對文件進行修改
⑨ 提交修改後的文件
⑩ 和分支conflict進行合併
文件報錯,有衝突
而後咱們能夠打開倉庫中的Conflict.txt文件進行查看
中間內容表示有衝突的地方,咱們能夠選擇保留一條信息,進行合併,假如咱們保留一下數據
再次提交併合併
OK了
發佈一個版本時,咱們一般先在版本庫中打一個標籤(tag),這樣,就惟一肯定了打標籤時刻的版本。未來不管何時,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。因此,標籤也是版本庫的一個快照。
打標籤命令:git tag <tagname>
在以往歷史中的提交id上打標籤
使用 :git tag <tagname> <commitid>
刪除標籤 git tag -d<tagname>
1首先註冊github
2.使用eclipse生成一個SSHkey
3.在github上對進行添加
4.在github上建立一個新的倉庫,並對倉庫進行初始化
5.將咱們的項目發佈到剛剛建立的倉庫中
由於咱們這裏是新項目,因此選擇建立一個repository
表示咱們的項目尚未指針
將項目提交到本地倉庫
寫上註釋,選上全部文件進行commit and push
選擇master分支
正在推送
成功
這是咱們成功發佈的項目,提交給github託管,當咱們須要對項目進行修改的時候
打開MyEclipseàfileàimport
正在導入
導入完成,而後咱們在這個項目上進行開發,不會影響到咱們倉庫中的項目的完整性
目前是master分支,咱們須要新建分支進行咱們的開發
新建分支後,自動切換分支
1.如今咱們已經切換到了上一節建立的分支上,如今咱們在咱們以前的項目上作一點修改
這是我在MyJindong分支上對項目進行的一個修改,新增了一個aaaaa.html的文件
2.先將咱們修改的項目git到本地的倉庫進行一次commit
2. 將更新推送到遠程倉庫,並自動建立分支
這是檢查本地和遠程倉庫的差別:
檢查出本地和遠程倉庫有差別,能夠進行,而後在倉庫中建立新分支,將咱們的修改後的項目git到遠程倉庫
3.這是咱們的新分支和master分支,這就成功的,將新分支git到了遠程倉庫
咱們初版的項目有bug,咱們在新分支上進行修改,將修改後的項目與咱們的以前的項目進行合併
咱們這裏要與主分支合併,首先切換到主分支,看主分支是否有更新,而後咱們合併到本地項目
選擇咱們修改的項目進行本地合併
合併後的結果
這是合併到遠程倉庫的結果.成功
選擇之後點擊OK便可
即可以進行版本的回退
模擬
①從遠程倉庫中導入一個項目到咱們的eclipe中
導入過程不過講解
這是咱們導入的項目,並進行本地版本庫的提交
②建立新分支
並對項目內容進行修改.而後提交到本地版本庫
④ 切換到主分支master,對項目進行修改,並提交本地版本庫
⑤ ,與conflict分支進行合併
便出現了咱們期待的結果
⑥ 查看衝突的代碼
標紅的文件表明有衝突
⑦ 查看衝突的代碼
雙擊
紅色框起來的代碼就是有衝突的代碼,再手動進行修改
假設咱們如今修改左側的代碼爲
再次提交,而後合併查看效果
[remote "origin"]
url = https://github.com/zhaoqinrong/test.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master