git作為一個分布式版本控制軟件,已經成為我們工作中使用的最廣泛的工具。
git詳細介紹點這里
三個概念
- 已提交(mommitted)
該文件已經被安全滴保存在本地數據庫種了。例如git clone 其實就是這個狀態(tài) - 已修改(modified)修改了某個文件,但還沒提交保存
- 已暫存(staged)把已經修改的文件放在下次提交時要保存的清單里
三個區(qū)域
- 工作區(qū)(也稱工作目錄),working directory
- 暫存區(qū) ,satge/index
-
歷史記錄區(qū)(也稱版本區(qū)),history
轉個阮一峰老師的圖吧
QQ截圖20171205221637.png
幾個常見名詞
- remote 遠程倉庫
- origin 一般默認遠程倉庫的標簽
- master 主支干
- Dev 分支
基礎命令
- 第一次使用需要設置用戶名和郵箱
git config --global user.name "name"用戶名
git config --global user.email "email address"郵箱 -
git add. 把文件的所有改變都放入暫存區(qū) -
git status查詢文件狀態(tài) -
git rm刪除文件 -
git mv重命名文件 - 提交到本地倉庫有幾個命令
git commit -am "備注信息"
git commit -a "備注信息"
git commit -m "備注信息"
注意備注信息是必須要填寫的,而且盡量簡明扼要 -
git pull用來更新本地倉庫版本的 -
git push提交到遠程倉庫
遠程本地操作
- git clone 遠程下載,最常用的命令
git clone origin "項目地址"
注意,地址協(xié)議有幾種、http,https,git等,但是推薦用ssh,也就是git協(xié)議,因為最快 - 使用ssh協(xié)議,則必須要有公私鑰對,沒有的話,必須要設置一個,不會的點這里
- 修改文件用vim打開,修改后退出保存,安利自己寫的vim使用教程
- 然后
git add.git commitgit push
本地文件推送到遠程倉庫
-
mkdir 文件夾名新建文件夾
touch 文件新建文件 - 最重要的步驟:git init
git是本地倉庫和遠程倉庫之間的傳送工具,可是我們剛剛只是建了文件夾,
文件夾又不是倉庫,自然無法git傳送,所以我們要把文件夾變成倉庫
這里重要的概念就是,倉庫里有個隱藏的.git的文件,只要文件夾里有.git 就行了
git init初始化文件夾為本地倉庫 - 這時我們git add. git commit git push 時 它會報錯說找不到遠程庫
我們clone的時候,遠程倉庫會自動建立兩者的鏈接關系,但我們只在本地創(chuàng)建倉庫
和遠程庫就沒有關系了,這時我們就得讓它倆有關系
git remote add origin 遠程庫地址添加遠程庫標簽
git remote -v查詢本地倉庫的遠程倉庫地址
git remote set-倉庫地址 倉庫名修改遠程倉庫地址 - 這時我們就可以提交了
分支操作
分支操作可以說是git 使用中最重要的操作了(不懂什么是分支,請自行谷歌/百度),首先要知道,倉庫有且只能有一個maser分支,可以說是主干,所有提供給用戶使用的正式版本,都在這個主分支上發(fā)布。
git branch查看本地分支列表
git branch -r查看遠程分支列表
git branch -a查看所有本地遠程分支git branch dev創(chuàng)建本地庫dev分支
git checkout dev切換到dev分支
這兩個可以簡寫成下面這個命令
git checkout -b dev合并分支
首先用git checkout 分支名切換到需要合并的分支上去,一般都是master分支
然后使用git marge 需要被合并的分支名合并分支到主分支上刪除分支
git branch -d 分支名刪除遠程分支
git push origin --delete [branch-name]
git branch -dr remote/branch
撤銷操作/版本回滾
- 這次簡單介紹下,我理解也不是很透徹,之后會專門寫一篇關于此的文章
- 一般是兩種用法
git reset和git revert -
git reset --"參數"一般參數有hard、mixed、soft
git reset --hard版本回退,同時工作區(qū)和暫存區(qū)的文件也回到此版本時的狀態(tài)
git reset --mixed默認參數,改變引用文件,不改變工作區(qū)文件,但是會改變暫存區(qū)文件
git reset --soft只修改文件,不會改變暫存區(qū)和工作區(qū)文件
可以這樣理解,當你需要徹底回到某個提交版本時,就用hard;若是想保留自己修改過的文件,就用mixed,保留下文件源碼,這也是默認方式;若是僅僅只是想撤銷某次提交,就用soft,保留下所有修改文件 -
git revert撤銷 某次操作,此次操作之前和之后的commit和history都會保留,并且把這次撤銷作為一次最新的提交
git revert HEAD撤銷前一次 commit
git revert HEAD^撤銷前前一次 commit
git revert 的撤銷并不是意義上刪除,而是重新提交一次commit命令,
只是這個命令內容剛好和要撤銷的那個命令完全相反,造成了回到錯誤提交狀態(tài)之前,但是你查記錄會發(fā)現,里面會有之前錯誤的commit ,也有這次的commit - 兩者區(qū)別,最大的區(qū)別在于,git revert 時,版本是前進的,而git reset時,版本其實是回到撤銷的命令的版本
我的理解是,revert,就相當于政府連續(xù)發(fā)布了兩條完全相反的命令,造成了狀態(tài)上的恢復,但是大家知道確實有過這個命令,而reset則是干脆刪除了這個命令,直接強制恢復,抽取了的記憶,這個是斷層的,不存在了,認為什么都沒發(fā)生 - 更深層的就只能大家在使用中去體會了,我以后會寫一篇詳細的文章。
寫在最后
- 當有沖突時,要先修改文件,再提交
- 更多git使用教程請點這里
