git 版本控制器 初学习,工作中的问题及其解决方法
one? day
1.? 下載安裝git控制器
>>>>>>(測試環(huán)境 window10)Git下載地址https://git-scm.com/downloads
>>>>>>>>>>>>>>>>>>>軟件的安裝:按照提示步驟一步安裝,安裝完成
?目前我只用到了 Git Bash
①這里安裝成功需要配置一下個人的用戶名user.name個人電子郵件地址user.email,每次提交的時候都會引用這兩條信息,說明是誰提交的,是誰更新的,這個將被納入歷史history
- $ git config --global user.name "zhang"
- $ git config --global user email "zhang@example.com"
②可以配置自己喜歡的的外部文件編輯器比如Emacs,Git默認使用Vi或Vim 就是linux常用的編輯器
- $ git config --global core,editor emacs
③查看配置信息 | 也可以直接查看某個環(huán)境變量的配置信息
- $ git config --list? ?|? ?$ git config user.name
?
2. git簡介
git是世界上最先進的版本控制器(沒有之一),版本控制器就是假設(shè)你想找回被刪除的文件,一個個找又會很麻煩,像我之前用的保存文件副本,這樣也是不可行的這樣會經(jīng)常搞忘記這個文件是第一版本還是另外一個是了
過了一周,你想找回被刪除的文字,但是已經(jīng)記不清刪除前保存在哪個文件里了,只好一個一個文件去找,真麻煩。
看著一堆亂七八糟的文件,想保留最新的一個,然后把其他的刪掉,又怕哪天會用上,還不敢刪,真郁悶。
說明一下版本控制器作用范圍
- 只能追蹤文本的變化,for example 頁面,js ,css程序代碼等
- 可以告訴你在哪行刪了什么文字,文段,而視頻,圖片等二進制文件還是不行的,無法跟蹤其變化
- 只能告訴你二進制每次改動串起來,比如100kb變?yōu)榱?20KB等
- word就是二進制文件所以-------
- 建議使用utf-8的編碼模式,使用Notepad++文本編輯器,以為Microsoft開發(fā)的記事本會在文本之前自動添加0xefbbbf(十六進制)的字符,比如網(wǎng)頁打開可同文件頭多一個"?"
Git的誕生 1991年linus創(chuàng)建linux,從此,linux系統(tǒng)不斷發(fā)展,已經(jīng)成為了最大的服務(wù)器系統(tǒng)軟件
? ? ? ? ? ? ? ? ?2002年<-linux的壯大都是靠眾多志愿者,志愿者為linux編寫代碼,再發(fā)給linus本人手動方式合并代碼
? ? ? ? ? ? ? ? ?為啥不linus不把linux放在CVS,SVN等免費的版本控制器上了,這些集中式的版本控制系統(tǒng)不但速度慢,而且必須聯(lián)網(wǎng)才能使用。有一些商用的版本控制系統(tǒng),雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符。
? ? ? ? ? ? ? ? ?曾經(jīng)BitMover公司出于人道主義精神,授權(quán)Linux社區(qū)免費使用這個版本控制系統(tǒng)。當被linux社區(qū)的牛人玩壞了。BitMover公司回收linux社區(qū)的免費使用權(quán)限
? ? ? ? ? ? ? ? ?linus花了兩周用C自己寫了一個分布式版本管理系統(tǒng) ---Git
? ? ? ? ? ? ? ? ?Git迅速成為最流行的分布式版本管理系統(tǒng),尤其是2008年,GitHub的出現(xiàn)
?3.? 創(chuàng)建版本庫
>>>>>>看著廖老師的博客試著操作一下
>>>>>>>>>>>>>>>>>>>創(chuàng)建一個來測試用的文件夾
①打開 Git Bash
②創(chuàng)建一個版本庫 $ mkdir learnGit?
③到自己創(chuàng)建的版本庫下? $ cd learnGit
④查看當前路徑 $ pwd?
?
?>>>>>>>>>>>>>>>>>>>使用命令件創(chuàng)建的文件夾 learnGit文件夾變成Git倉庫
① $ git init? --------------------------------瞬間Git倉庫就建好了,而且還是個空倉庫(empty Git repository 清空Git存儲庫)
- 此時會發(fā)現(xiàn)文件夾下多了一個.git目錄? ?$ ls -ah
?
?>>>>>>>>>>>>>>>>>>> 創(chuàng)建文件,模擬版本更新事故現(xiàn)場真實還原
①創(chuàng)建一個readme.txt文件夾----->第一步$ git add 添加到倉庫的暫存區(qū)(后面會介紹什么叫)------>第二步 $ git commit 把文件提交到倉庫
- 通過圖形化操作也就是自己在window系統(tǒng)創(chuàng)建一個readme.txt添加以下字段-------------------最好是在learnGit文件下,放在別處Git再厲害也是不可能找到的
?
- 提示信息:?
②對readme.txt 進行多次修改
- 再一次修改readme.txt文件加入如下字段------------------使用 $ git status命令查看掌握當前庫的狀態(tài) ---------------使用? $ git diff 查看文件到底修改了些什么
- 提示消息:
?
- 提示消息
③提交到庫
- 提交到暫存器 $ git add---------------------------將修改提交到庫 $ git commit -m "this is two"
- 提示消息
?
??>>>>>>>>>>>>>>>>>>>? 版本回退
- 和上文一樣的步驟在提交一個版本的readme.txt
- $ git log命令查看歷史記錄,最多可以可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。
- 如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上$git log--pretty=oneline參數(shù):
3.還可以繼續(xù)回退到上一個版本wrote a readme file,不過且慢,然我們用git log再看看現(xiàn)在版本庫的狀態(tài):
4.最新的那個版本append GPL已經(jīng)看不到了!好比你從21世紀坐時光穿梭機來到了19世紀,想再回去已經(jīng)回不去了,腫么辦?
辦法其實還是有的,只要上面的命令行窗口還沒有被關(guān)掉,你就可以順著往上找啊找啊,找到那個append GPL的commit id是?8e10e6...,于是就可以指定回到未來的某個版本:
5.$ git reset --hard 8e10e6版本號沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能只寫前一兩位,因為Git可能會找到多個版本號,就無法確定是哪一個了。
再小心翼翼地看看readme.txt的內(nèi)容:
6.在Git中,總是有后悔藥可以吃的。當你用$ git reset --hard HEAD^回退到add distributed版本時,再想恢復(fù)到append GPL,就必須找到append GPL的commit id。Git提供了一個命令git reflog用來記錄你的每一次命令:
>>>>>>>>>>>>>>>>>>>>工作區(qū)和暫存區(qū)
①其實把提出這個概念,就是為了說明文件成文版本被記錄需要經(jīng)過三個過程
- Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針叫HEAD。
-
Git非常清楚地告訴我們,readme.txt被修改了,而LICENSE還從來沒有被添加過,所以它的狀態(tài)是Untracked。現(xiàn)在,使用兩次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下:
- 一旦提交后,如果你又沒有對工作區(qū)做任何修改,那么工作區(qū)就是“干凈”的:
?
>>>>>>>>>>>>>>>>>>>>>>>>>>>.撤銷修改
可能出錯的地方 需要還原到先前(上一個)版本
①還未提交還在自己的文件夾里,準備提交的時候發(fā)現(xiàn)錯誤,這個簡單可以通過手動刪除新添加的東西
- 也可以是使用git checkout -- readme.txt(其中--和重要沒有--就是另外一個命令了)
-
git checkout -- readme.txt意思就是,把readme.txt文件在工作區(qū)的修改全部撤銷,這里有兩種情況:
一種是readme.txt自修改后還沒有被放到暫存區(qū),現(xiàn)在,撤銷修改就回到和版本庫一模一樣的狀態(tài);
一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態(tài)。
②提交了 在暫存區(qū)了已經(jīng)
- $ git reset HEAD readme.txt
- git reset命令既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū)。當我們用HEAD時,表示最新的版本。
- 再使用 git s'tatus 看見 暫存區(qū)干凈了就是工作區(qū)還有東西
- $ git checkout -- readme.txt
以下是我遇到的問題以及解決方法
?
創(chuàng)建庫
1. git config --global user.name "your name"
2. git config --global user.email "815842080@qq.com"
echo "# vue" >> README.md
3. git init
4. git add test.txt
5. git commit -m "項目介紹"
6. git remote add origin https://github.com/520Girl/vue.git
6. git push -u origin master(dev) -u第一次提交需要這個,origin表示遠程庫默認名,master表示主分支名
7. git remote 查看遠程倉庫名稱
7.git remote rm origin
9.$ git clone git@github.com:michaelliao/gitskills.git 克隆下來
8.origin/dev 表示origin遠程庫,dev分支提交的
版本回退
1. git log |git log --pretty=oneline 后者簡要顯示, 按英文狀態(tài)下的q
2. git reset --hard HEAD^ 回退到上一版本 HEAD^^ HEAD~100 1094a
3. git reflog 記錄每一次命令
?
撤銷修改
情況分析:
工作區(qū)修改:
1.知道修改的內(nèi)容自己直接刪除
2.通過 $ gti checkout -- readme.txt 回到版本庫一摸一樣的狀態(tài)
提交到了暫存區(qū)后修改了:
1.通過 $ git checkout --readme.txt 回到暫存區(qū)修改的狀態(tài)[注意-- 沒有這個符號表示切換到另一個分支]
2.通過 git reset HEAD readme.txt將在暫存區(qū)的修改回退到工作區(qū)(將修改帶到工作區(qū)),之后通過 $git checkout 刪除工作區(qū)的修改
刪除文件:
1.rm 提示將要刪除文件
2.git status 查看刪除的內(nèi)容
3.git rm 確認刪除
4.git checkout -- 回退到版本庫中最新
分支創(chuàng)建-- 分支上可創(chuàng)建分支
--------分支可以上傳push后,只有上傳后才能在github 上看到branches,就和master一樣dev
--------遠程庫可以改通過git remote add $ git push jiang bug
1.git checkout -b dev 創(chuàng)建并切換到dev
2. git branch 查看當前分支
3.git merge dev 分支合并 合并dev分支到master上 Fast-forward為快速模式(弊端 刪除分支后,會丟掉分支信息。)所以合并分支merge時使用
--no-ff 取消快速模式,可以在 log下看到分支提交信息
4. git branch -d dev 刪除分支(-D強行刪除)
5.git log --graph --pretty=oneline --abbrev-commit 查看分支提交情況
分支沖突問題
描述:在dev分支上修改的文件提交成功(commit),master分支修改的文件提交成功(commit),合并,出現(xiàn)問題,
git status查看,<<<===>>>中是錯誤,進行增刪改查,之后再次提交add-commit ,最后刪除分支
Bug分支:
描述:在dev上工作還沒完成,現(xiàn)在需要處理一個bug,你想新建一個分支來處理,但dev工作還沒提交---解決方案
git stash 當前工作現(xiàn)場存儲起來,status查看不了,需要git stash list查看,恢復(fù):
1.git stash apply stash內(nèi)容并不刪除, 可以通過git stash drop刪除
2.git stash pop 恢復(fù)的同時吧stash內(nèi)容刪了
3. git stash apply stash@{0} 根據(jù)指定的stash恢復(fù)(stash提交多次)
feature分支,新功能分支,需要添加新功能需要通過在dev分支上新建一個feature分支,在上面開發(fā),完成后,合并,最后,刪除該feature分支。
多人協(xié)作之抓取分支:
問題描述:也就是一個倉庫通過不同的遠程庫名提交的內(nèi)容會報錯,解決方法如下,需要確認遠程庫名/分支名git config 在同一倉庫添加不同庫名(以及用戶)
$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
?
vscode
git pull命令用于從另一個存儲庫或本地分支獲取并集成(整合)。git pull命令的作用是:取回遠程主機某個分支的更新,再與本地的指定分支合并,它的完整格式稍稍有點復(fù)雜
D表示刪除文件,U表示新增文件,M表示修改過的文件,點擊可查看修改內(nèi)容
git clone 與 git pull的區(qū)別
?
git clone 從遠程服務(wù)器克隆一個一摸一樣的版本庫到本地
eg:$ git clone #版本庫網(wǎng)址# #本地目錄名#
$ git clone git://github.com/schacon/grit.git mygrit
?
git pull 從遠程服務(wù)器獲取一個分支的更新內(nèi)容,更新到本地,取回遠程主機某個分支的更新,再與本地的指定分支合并
eg:$ git pull ##遠程主機(origin) #遠程分之(next)#:#本地分之(master)#
cat test.txt 查看文件中的內(nèi)容
cd..
cd ~
?
①②③④⑤⑥⑦⑧
?
轉(zhuǎn)載于:https://www.cnblogs.com/520Girl/p/10586644.html
總結(jié)
以上是生活随笔為你收集整理的git 版本控制器 初学习,工作中的问题及其解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019.3.23 python的uni
- 下一篇: Round A - Kick Start