猴子都能懂的git
https://backlog.com/git-tutorial/cn/
git和SVN的簡單對比
SVN必須聯(lián)網(wǎng)才能正常工作,git支持本地版本控制工作
分布式和集中式的最大區(qū)別在于:在分布式下
開發(fā)者可以本地提交
每個開發(fā)者機器上都有一個服務(wù)器的數(shù)據(jù)庫
git的工作原理,
工作區(qū)(Working Directory):倉庫文件夾里除.git目錄以外的內(nèi)容
版本庫(Repository):.git目錄,用于存儲記錄版本信息
暫緩區(qū)(stage)
分支(master):git自動創(chuàng)建的第一個分支
HEAD指針:用于指向當(dāng)前分支
git add :把文件修改添加到暫存區(qū)
git commit :把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支
SourceTree
下載地址:http://www.sourcetreeapp.com/download
git常用指令
git help :git指令幫助手冊
查看其他指令的做法:git help 其他指令
git init : 初始化本地倉庫
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)用到整個系統(tǒng)中:git config ––gloabal
----
git status :查文件的狀態(tài)
查看某個文件的狀態(tài):git status 文件名
查看當(dāng)前路徑所有文件的狀態(tài):git status
git log :查看文件的修改日志
查看某個文件的修改日志:git log 文件名
查看當(dāng)前路徑所有文件的修改日志:git log
用一行的方式查看簡單的日志信息:git log ––pretty=oneline
查看最近的N次修改:git log –N(N是一個整數(shù))
git reflog 簡單log
git diff :查看文件最新改動的地方
查看某個文件的最新改動的地方:git diff 文件名
查看當(dāng)前路徑所有文件最新改動的地方:git diff
------------
git init :初始化一個空的本地倉庫,生成一個.git目錄,用于維護版本信息
在當(dāng)前路徑初始化倉庫:git init
在其他路徑初始化倉庫:git init 倉庫路徑
git add :將工作區(qū)的文件保存到暫緩區(qū)
保存某個文件:git add 文件名
保存所有文件:git add .
git commit :將暫緩區(qū)的文件提交到當(dāng)前分支
提交某個文件到分支:git commit -m ”注釋” 文件名
保存當(dāng)前路徑的所有文件到分支:git commit -m ”注釋”
------------
git reset :版本回退(建議加上––hard參數(shù),git支持無限次后悔)
回退到上一個版本:git reset ––hard HEAD^
回退到上上一個版本:git reset ––hard HEAD^^
回退到上N個版本:git reset ––hard HEAD~N(N是一個整數(shù))
回退到任意一個版本:git reset ––hard 版本號(版本號用7位即可)
git rm:刪除文件(刪完之后要進行commit操作,才能同步到版本庫)
------------
git clone:下載遠(yuǎn)程倉庫到本地
下載遠(yuǎn)程倉庫到當(dāng)前路徑:git clone 倉庫的URL
下載遠(yuǎn)程倉庫到特定路徑:git clone 倉庫的URL 存放倉庫的路徑
git pull:下載遠(yuǎn)程倉庫的最新信息到本地倉庫
git push:將本地的倉庫信息推送到遠(yuǎn)程倉庫
5. 備注補充
文件狀態(tài)(git status)
> 顏色含義
紅色: 代表被添加或者修改的文件沒有被添加到暫緩區(qū)
綠色: 代表文件在暫緩區(qū),等待提交
> 版本號的含義
版本號是一個由SHA1生成的40位哈希值
這樣做的目的是保證版本號的唯一
日志查看配置, 命令如下:
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)簽, 通過控制head指向,來回到任一版本
> 進入文件夾后,初始化共享庫
git init ——bare
> 進入文件夾后
git clone 共享庫絕對路徑
> 進入工作區(qū),配置姓名,郵箱
git config user.name “manager”
git config user.email “manager@qq.com”
> 給此版本打標(biāo)簽,并將標(biāo)簽上傳到共享庫
git tag -a v1.0 -m “標(biāo)記1.0版本”
git push origin v1.0
———至此,分支修復(fù)bug結(jié)束,下面合并分支———
從共享庫更新代碼到本地庫
git pull
查看當(dāng)前服務(wù)器都有哪些分支
git branch -r
切換到master分支后,將v1.0fixbug分支合并過來
git checkout master
git merge origin/v1.0fixbug -m “合并分支”
合并完成后提交到共享庫
git add .
git commit -m “合并分支”
git push
合并完成后,可以刪除共享庫的分支
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,通常用來給開發(fā)分支做一個標(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> # 從版本庫中刪除文件
git reset <file> # 從暫存區(qū)恢復(fù)到工作文件
git reset HEAD^ # 恢復(fù)最近一次提交過的狀態(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)程倉庫所有分支更新并合并到本地
git push origin master # 將本地主分支推到遠(yuǎn)程主分支
分支的使用
一、查看有多少個分支?
1.git branch 可以查看當(dāng)前版本庫中有多少個分支
1.如果當(dāng)前的版本庫是空的, 那么無法查看
2.分支前面有*號代表當(dāng)前的HEADER指針指向哪一個分支, 我們提交的代碼就會提交到指向的分支中
二、如何創(chuàng)建一個分支
git branch 分支名稱 來創(chuàng)建一個新的分支
在哪個分支中創(chuàng)建了新的分支, 那么創(chuàng)建出來的新的分支就會繼承當(dāng)前分支的所有狀態(tài)
例如:
在master分支中做了兩個操作, 然后在master分支中創(chuàng)建了Dev分支
那么創(chuàng)建出來的Dev分支就會繼承master分支中的這兩個操作
注意點:
一旦分支被創(chuàng)建出來之后, 分支就是獨立的, 分支之間不會相互影響
三、切換分支?
1.通過git switch 分支名稱 來修改HEADER指針的指向
注意點: 只要HEADER指針的指向發(fā)生了改變, 那么commit的代碼就會發(fā)生改變
HEADER指針指向誰commit提交的代碼就提交到誰里面
四、如何將分支提交到遠(yuǎn)程服務(wù)器
1.通過git branch -r 來查看遠(yuǎn)程服務(wù)器上有多少個分支
2.首先需要在本地切換到新建的分支中, 然后通過git push指令提交新建的分支到遠(yuǎn)程的服務(wù)器
git push --set-upstream origin Dev
五、如何合并分支
可以通過 git merge 分支名稱 來合并分支
例如:
在master分支中執(zhí)行 git merge Dev 就代表需要將Dev分支中的代碼都合并到master分支中
例如:
在Dev分支中執(zhí)行 git merge master 就代表需要將master分支中的代碼都合并到Dev分支中
六、如何刪除分支
1.可以通過git branch -d 分支名稱 來刪除本地的分支
2.可以通過git push origin --delete 分支名稱 來刪除遠(yuǎn)程服務(wù)器的分支
1、
什么是“git cherry-pick”?
命令 git cherry-pick 通常用于把特定提交從存儲倉庫的一個分支引入到其他分支中。
常見的用途是從維護的分支到開發(fā)分支進行向前或回滾提交。
這與其他操作(例如:合并(merge)、變基(rebase))形成鮮明對比,
后者通常是把許多提交應(yīng)用到其他分支中。
小結(jié):git cherry-pick <commit-hash>
2、
如何從 git 中刪除文件,而不將其從文件系統(tǒng)中刪除?
如果你在 git add 過程中誤操作,你最終會添加不想提交的文件。
但是,git rm 則會把你的文件從你暫存區(qū)(索引)和文件系統(tǒng)(工作樹)中刪除,這可能不是你想要的。
上面意思是,git reset <paths> 是 git add <paths> 的逆操作。
3、
什么時候使用“git rebase”代替“git merge”?
這兩個命令都是把修改從一個分支集成到另一個分支上,它們只是以非常不同的方式進行。
參考:
http://blog.jobbole.com/114297/
https://blog.csdn.net/pushiqiang/article/details/79068449
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000

Vim編輯器簡單使用.jpeg
命令模式:等待編輯命令輸入;所有輸入的內(nèi)容都被當(dāng)做命令來執(zhí)行
插入模式:輸入的所有內(nèi)容都被顯示,并被當(dāng)做文件內(nèi)容處理
命令行模式:執(zhí)行待定命令(保存文件并退出vim : wq ; 強制退出不保存: q! )

git常用命令速查表.png