猴子都能懂的git
https://backlog.com/git-tutorial/cn/
git和SVN的簡(jiǎn)單對(duì)比
SVN必須聯(lián)網(wǎng)才能正常工作阶淘,git支持本地版本控制工作
分布式和集中式的最大區(qū)別在于:在分布式下
開發(fā)者可以本地提交
每個(gè)開發(fā)者機(jī)器上都有一個(gè)服務(wù)器的數(shù)據(jù)庫(kù)
git的工作原理掘鄙,
工作區(qū)(Working Directory):倉(cāng)庫(kù)文件夾里除.git目錄以外的內(nèi)容
版本庫(kù)(Repository):.git目錄墨林,用于存儲(chǔ)記錄版本信息
暫緩區(qū)(stage)
分支(master):git自動(dòng)創(chuàng)建的第一個(gè)分支
HEAD指針:用于指向當(dāng)前分支
git add :把文件修改添加到暫存區(qū)
git commit :把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支
SourceTree
下載地址:http://www.sourcetreeapp.com/download
git常用指令
git help :git指令幫助手冊(cè)
查看其他指令的做法:git help 其他指令
git init : 初始化本地倉(cāng)庫(kù)
git config :git的配置信息相關(guān)(修改的是.git/config文件)
配置用戶名:git config user.name 用戶名(用于跟蹤修改記錄)
配置郵箱:git config user.email 郵箱(用于多人開發(fā)間的溝通)
查看配置信息:git config –l
編輯配置信息:git config –e(用vim編輯月弛,:wq是退出vim編輯器)
設(shè)置指令的別名:git config alias.別名 原指令名稱
設(shè)置帶參數(shù)指令的別名:git config alias.別名 “原指令名稱 參數(shù)”
將此設(shè)置應(yīng)用到整個(gè)系統(tǒng)中:git config ––gloabal
----
git status :查文件的狀態(tài)
查看某個(gè)文件的狀態(tài):git status 文件名
查看當(dāng)前路徑所有文件的狀態(tài):git status
git log :查看文件的修改日志
查看某個(gè)文件的修改日志:git log 文件名
查看當(dāng)前路徑所有文件的修改日志:git log
用一行的方式查看簡(jiǎn)單的日志信息:git log ––pretty=oneline
查看最近的N次修改:git log –N(N是一個(gè)整數(shù))
git reflog 簡(jiǎn)單log
git diff :查看文件最新改動(dòng)的地方
查看某個(gè)文件的最新改動(dòng)的地方:git diff 文件名
查看當(dāng)前路徑所有文件最新改動(dòng)的地方:git diff
------------
git init :初始化一個(gè)空的本地倉(cāng)庫(kù)浮禾,生成一個(gè).git目錄糠馆,用于維護(hù)版本信息
在當(dāng)前路徑初始化倉(cāng)庫(kù):git init
在其他路徑初始化倉(cāng)庫(kù):git init 倉(cāng)庫(kù)路徑
git add :將工作區(qū)的文件保存到暫緩區(qū)
保存某個(gè)文件:git add 文件名
保存所有文件:git add .
git commit :將暫緩區(qū)的文件提交到當(dāng)前分支
提交某個(gè)文件到分支:git commit -m ”注釋” 文件名
保存當(dāng)前路徑的所有文件到分支:git commit -m ”注釋”
------------
git reset :版本回退(建議加上––hard參數(shù)娄涩,git支持無(wú)限次后悔)
回退到上一個(gè)版本:git reset ––hard HEAD^
回退到上上一個(gè)版本:git reset ––hard HEAD^^
回退到上N個(gè)版本:git reset ––hard HEAD~N(N是一個(gè)整數(shù))
回退到任意一個(gè)版本:git reset ––hard 版本號(hào)(版本號(hào)用7位即可)
git rm:刪除文件(刪完之后要進(jìn)行commit操作嘲驾,才能同步到版本庫(kù))
------------
git clone:下載遠(yuǎn)程倉(cāng)庫(kù)到本地
下載遠(yuǎn)程倉(cāng)庫(kù)到當(dāng)前路徑:git clone 倉(cāng)庫(kù)的URL
下載遠(yuǎn)程倉(cāng)庫(kù)到特定路徑:git clone 倉(cāng)庫(kù)的URL 存放倉(cāng)庫(kù)的路徑
git pull:下載遠(yuǎn)程倉(cāng)庫(kù)的最新信息到本地倉(cāng)庫(kù)
git push:將本地的倉(cāng)庫(kù)信息推送到遠(yuǎn)程倉(cāng)庫(kù)
5. 備注補(bǔ)充
文件狀態(tài)(git status)
> 顏色含義
紅色: 代表被添加或者修改的文件沒(méi)有被添加到暫緩區(qū)
綠色: 代表文件在暫緩區(qū),等待提交
> 版本號(hào)的含義
版本號(hào)是一個(gè)由SHA1生成的40位哈希值
這樣做的目的是保證版本號(hào)的唯一
日志查看配置, 命令如下:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\<%an\>%Creset' --abbrev-commit"
Git版本備份/分支管理
git tag -a v1.0 -m “標(biāo)記1.0版本”
git push origin v1.0
touch main.c 創(chuàng)建main.c文件
git 直接打標(biāo)簽系忙, 通過(guò)控制head指向诵盼,來(lái)回到任一版本
> 進(jìn)入文件夾后,初始化共享庫(kù)
git init ——bare
> 進(jìn)入文件夾后
git clone 共享庫(kù)絕對(duì)路徑
> 進(jìn)入工作區(qū),配置姓名,郵箱
git config user.name “manager”
git config user.email “manager@qq.com”
> 給此版本打標(biāo)簽,并將標(biāo)簽上傳到共享庫(kù)
git tag -a v1.0 -m “標(biāo)記1.0版本”
git push origin v1.0
———至此,分支修復(fù)bug結(jié)束,下面合并分支———
從共享庫(kù)更新代碼到本地庫(kù)
git pull
查看當(dāng)前服務(wù)器都有哪些分支
git branch -r
切換到master分支后,將v1.0fixbug分支合并過(guò)來(lái)
git checkout master
git merge origin/v1.0fixbug -m “合并分支”
合并完成后提交到共享庫(kù)
git add .
git commit -m “合并分支”
git push
合并完成后,可以刪除共享庫(kù)的分支
git branch -r -d origin/v1.0fixbug
查看版本標(biāo)簽,至此結(jié)束!!
git tag
git push 只能提交代碼,不能連同標(biāo)記一起提交
git push origin v1.0 提交標(biāo)簽
tag指向一次commit的id银还,通常用來(lái)給開發(fā)分支做一個(gè)標(biāo)記
查看標(biāo)簽 : git tag
查看某兩次tag之間的commit:git log --pretty=oneline tagA..tagB
查看某次tag之后的commit: git log --pretty=oneline tagA..
5.常用命令
git show # 顯示某次提交的內(nèi)容 git show $id
git add <file> # 將工作文件修改提交到本地暫存區(qū)
git rm <file> # 從版本庫(kù)中刪除文件
git reset <file> # 從暫存區(qū)恢復(fù)到工作文件
git reset HEAD^ # 恢復(fù)最近一次提交過(guò)的狀態(tài)风宁,即放棄上次提交后的所有本次修改
git diff <file> # 比較當(dāng)前文件和暫存區(qū)文件差異 git diff
git log -p <file> # 查看每次詳細(xì)修改內(nèi)容的diff
git branch -r # 查看遠(yuǎn)程分支
git merge <branch> # 將branch分支合并到當(dāng)前分支
git stash # 暫存
git stash pop #恢復(fù)最近一次的暫存
git pull # 抓取遠(yuǎn)程倉(cāng)庫(kù)所有分支更新并合并到本地
git push origin master # 將本地主分支推到遠(yuǎn)程主分支
分支的使用
一、查看有多少個(gè)分支?
1.git branch 可以查看當(dāng)前版本庫(kù)中有多少個(gè)分支
1.如果當(dāng)前的版本庫(kù)是空的, 那么無(wú)法查看
2.分支前面有*號(hào)代表當(dāng)前的HEADER指針指向哪一個(gè)分支, 我們提交的代碼就會(huì)提交到指向的分支中
二蛹疯、如何創(chuàng)建一個(gè)分支
git branch 分支名稱 來(lái)創(chuàng)建一個(gè)新的分支
在哪個(gè)分支中創(chuàng)建了新的分支, 那么創(chuàng)建出來(lái)的新的分支就會(huì)繼承當(dāng)前分支的所有狀態(tài)
例如:
在master分支中做了兩個(gè)操作, 然后在master分支中創(chuàng)建了Dev分支
那么創(chuàng)建出來(lái)的Dev分支就會(huì)繼承master分支中的這兩個(gè)操作
注意點(diǎn):
一旦分支被創(chuàng)建出來(lái)之后, 分支就是獨(dú)立的, 分支之間不會(huì)相互影響
三戒财、切換分支?
1.通過(guò)git switch 分支名稱 來(lái)修改HEADER指針的指向
注意點(diǎn): 只要HEADER指針的指向發(fā)生了改變, 那么commit的代碼就會(huì)發(fā)生改變
HEADER指針指向誰(shuí)commit提交的代碼就提交到誰(shuí)里面
四、如何將分支提交到遠(yuǎn)程服務(wù)器
1.通過(guò)git branch -r 來(lái)查看遠(yuǎn)程服務(wù)器上有多少個(gè)分支
2.首先需要在本地切換到新建的分支中, 然后通過(guò)git push指令提交新建的分支到遠(yuǎn)程的服務(wù)器
git push --set-upstream origin Dev
五捺弦、如何合并分支
可以通過(guò) git merge 分支名稱 來(lái)合并分支
例如:
在master分支中執(zhí)行 git merge Dev 就代表需要將Dev分支中的代碼都合并到master分支中
例如:
在Dev分支中執(zhí)行 git merge master 就代表需要將master分支中的代碼都合并到Dev分支中
六饮寞、如何刪除分支
1.可以通過(guò)git branch -d 分支名稱 來(lái)刪除本地的分支
2.可以通過(guò)git push origin --delete 分支名稱 來(lái)刪除遠(yuǎn)程服務(wù)器的分支
1、
什么是“git cherry-pick”列吼?
命令 git cherry-pick 通常用于把特定提交從存儲(chǔ)倉(cāng)庫(kù)的一個(gè)分支引入到其他分支中幽崩。
常見(jiàn)的用途是從維護(hù)的分支到開發(fā)分支進(jìn)行向前或回滾提交。
這與其他操作(例如:合并(merge)寞钥、變基(rebase))形成鮮明對(duì)比慌申,
后者通常是把許多提交應(yīng)用到其他分支中。
小結(jié):git cherry-pick <commit-hash>
2理郑、
如何從 git 中刪除文件蹄溉,而不將其從文件系統(tǒng)中刪除?
如果你在 git add 過(guò)程中誤操作您炉,你最終會(huì)添加不想提交的文件柒爵。
但是,git rm 則會(huì)把你的文件從你暫存區(qū)(索引)和文件系統(tǒng)(工作樹)中刪除赚爵,這可能不是你想要的餐弱。
上面意思是宴霸,git reset <paths> 是 git add <paths> 的逆操作。
3膏蚓、
什么時(shí)候使用“git rebase”代替“git merge”瓢谢?
這兩個(gè)命令都是把修改從一個(gè)分支集成到另一個(gè)分支上,它們只是以非常不同的方式進(jìn)行驮瞧。
參考:
http://blog.jobbole.com/114297/
https://blog.csdn.net/pushiqiang/article/details/79068449
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000
命令模式:等待編輯命令輸入;所有輸入的內(nèi)容都被當(dāng)做命令來(lái)執(zhí)行
插入模式:輸入的所有內(nèi)容都被顯示,并被當(dāng)做文件內(nèi)容處理
命令行模式:執(zhí)行待定命令(保存文件并退出vim : wq ; 強(qiáng)制退出不保存: q! )