git的学习笔记(一):git本地操作
1.Git介紹
- Git是一個開源的分布式版本控制軟件,用以有效、高速的處理從很小到非常大的項目版本管理。
- Git 最初是由Linus Torvalds設(shè)計開發(fā)的,用于管理Linux內(nèi)核開發(fā)。
- Git 是根據(jù)GNU的GPL(通用公共許可證)V2的條款分發(fā)的自由/免費軟件,安裝參見:http://git-scm.com/
- Git本身可以做到版本控制,但其所有版本記錄只能保存在本機(jī),如果想要將文件內(nèi)容以及版本記錄同時保存在遠(yuǎn)程,則需要結(jié)合GitHub來使用。
- GitHub是一個基于Git的遠(yuǎn)程文件托管平臺(同GitCafe、BitBucket和GitLab等)。
集中式版本控制系統(tǒng)與分布式版本控制系統(tǒng)的區(qū)別
-
集中式
版本庫是集中存放在中央服務(wù)器,用戶客戶端只有文件的某個版本.
需要的時候,用戶先從中央服務(wù)器下載最新版本的文件到本地電腦,然后開始修改,修改完成后再把自己修改后的版本推送給中央服務(wù)器。
集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作,如果客戶端到中央服務(wù)器的網(wǎng)絡(luò)不好的時候,就會很影響工作的效率. -
分布式
遠(yuǎn)程服務(wù)器保存所有版本,用戶客戶端也可以保存所有版本
分布式版本控制系統(tǒng)中每個人的電腦上都有一個完整的版本庫.需要的時候,可以不需要聯(lián)網(wǎng),因為版本庫就在你自己的電腦上。
多人協(xié)同工作的時候,一個用戶在自己電腦上改了文件A,另一個人在他的電腦上改了文件B,工作結(jié)束只需把各自的修改推送給對方,就可以互相看到對方的修改了。
2. 配置git的用戶信息
git config --global user.name 'your_name' git config --global user.email 'your_email'git config的三個作用域
缺省等同于local
git config --local # 只對某個git倉庫有效 git config --global # global對當(dāng)前用戶所有倉庫有效 git config --system # system對系統(tǒng)所有登錄的用戶有效顯示config的配置,加--list
git config --list --local git config --list --global git config --list --system3.git倉庫管理
3.1 初始化git倉庫
1.把已有的項目代碼納入git管理
cd 項目代碼所有文件夾 git init2.新建的項目直接用git管理
cd 某個文件夾 git init your_project # 會有當(dāng)前路徑下創(chuàng)建和項目名稱同名的文件夾 cd your_project3.2 往倉庫里添加文件
git add files # 添加文件 git add . # 把工作區(qū)所有文件移動在暫存區(qū) git commit # 提交信息,加上 -a 選項可以把暫存區(qū)里的所有文件都進(jìn)行提交3.3 文件重命名和刪除
git mv old_file_name new_file_name git rm file_name3.4 通過git log查看版本演變歷史
查看版本演變歷史的命令
git log可添加的選項:--oneline # 以每一行的方式查看當(dāng)前分支的所有提交日志--pretty=online # 用commit id(版本號)顯示修改記錄,減少log文件的輸出,使每條記錄只輸出一行-n4 # 以每一行的方式查看當(dāng)前分支最近的4條提交日志--all # 查看所有分支的提交日志--graph # 以圖形化方式查看提交日志可以通過gitk圖形界面工具來查看版本歷史
3.5 查看git倉庫的信息
git status 查看當(dāng)前git倉庫的狀態(tài) git diff * 檢查上一次對文件所做的修改內(nèi)容 git log 查看版本庫的修改歷史記錄 git reflog 用來記錄每一次命令(查詢某次修改的版本號)3.6 git的區(qū)域狀態(tài)說明
工作區(qū):
工作區(qū)(word directory)就是在電腦上能看到的目錄 當(dāng)前開發(fā)程序所在的目錄為工作區(qū),該區(qū)域的文件會有狀態(tài)變化且狀態(tài)由git自動檢測 目錄中的文件的任何變化(增,刪,改),git都會檢測到,可以使用git status命令查看版本庫:
版本庫(repository)工作區(qū)有一個隱藏目錄.git,保存的就是git的版本庫 工作區(qū)檢測到有文件發(fā)生變化,那么意味著文件狀態(tài)被改變,這時就可以當(dāng)做一個版本進(jìn)行提交工作區(qū)的代碼通過git add來加入到暫存區(qū),使用git commit命令把暫存區(qū)的文件加入到當(dāng)前分支的(一般為git自動創(chuàng)建master的分區(qū))
git的版本庫中一個區(qū)域,稱之為stage(或者叫index)的暫存區(qū). 在工作區(qū)的文件被修改,使用`git status`查看狀態(tài)時,顯示文件的顏色為紅色 使用`git add`把文件從工作區(qū)移到暫存區(qū),再使用`git status`查看狀態(tài)時,顯示文件的顏色為綠色3.7 git區(qū)域操作
git checkout --filename 撤銷工作區(qū)的修改,把工作區(qū)的文件恢復(fù)到暫存區(qū)的狀態(tài)如果文件修改后還未放到暫存區(qū),撤消修改就回到未修改之前的狀態(tài)如果文件修改后已添加到暫存區(qū),撤消修改就回到添加進(jìn)暫存區(qū)時的狀態(tài) git reset HEAD filename 把暫存區(qū)的修改撤消掉,重新放回到工作區(qū),這條命令是在把修改后的文件提交到暫存區(qū)之后又后悔了,使文件恢復(fù)到版本庫的狀態(tài) git reset HEAD 取消暫存區(qū)所有文件 git reset HEAD -- index.html 把暫存區(qū)中的index.html恢復(fù)成跟工作區(qū)一樣,可以添加多個文件 git checkout -- index.html 把工作區(qū)恢復(fù)成和暫存區(qū)一樣 git stash 儲存當(dāng)前工作現(xiàn)場 git stash list 查看stash區(qū)域的所有信息 git stash apply 取出stash區(qū)域中的文件放到當(dāng)前工作區(qū),但是文件還保存在stash區(qū)域中,可以反復(fù)使用 git stash drop 刪除最近一次儲存的stash git stash pop 取出stash區(qū)域中的文件放到當(dāng)前工作區(qū)中,文件不會繼續(xù)保存到stash區(qū)域中 git stash stash@{num} 恢復(fù)指定stash-
注意
- 若誤刪文件時,使用git checkout --filename 來恢復(fù)到未刪除之前的狀態(tài)
- 確實要刪除一個文件,使用git rm filename將其從git版本庫中刪除
- git checkout和git reset都是在將文件add到暫存區(qū),沒有commit時的撤消修改
- 若已經(jīng)將文件從暫存區(qū)commit到版本庫而未推送到遠(yuǎn)程時,可以回退到上一個版本
- 若文件已經(jīng)被推送到遠(yuǎn)程,則無法撤消
需要注意的是,git是對文件更改的管理,不是基于文件的管理
4.git分支及合并操作
git branch # 查看當(dāng)前分支并且看到在哪個分支下工作 git branch -v # 查看本地git分支 git branch -av # 查看所有分支及其詳細(xì)信息,如果添加遠(yuǎn)程倉庫,會顯示遠(yuǎn)程倉庫上的分支 git branch dev # 創(chuàng)建一個dev分支 git checkout -b dev # 創(chuàng)建dev分支并切換到dev分支上工作 git checkout -b temp 5ccb4b3 # 基于5ccb4b3這個版本創(chuàng)建一個temp的分支 git checkout -b branch2 branch1 # 基于branch1分支創(chuàng)建并切換到branch2分支 git checkout dev # 切換到dev分支 git checkout master # 切換回master分支 git branch -d dev # 刪除dev分支,刪除分支時,分支相關(guān)的信息也會被刪除 git branch -D branch_name # 刪除指定分支,刪除分支時,分支相關(guān)的信息也會被刪除 git checkout --* # 把文件返回到修改之前的狀態(tài) git merge dev # 把dev分支合并到當(dāng)前分支 git merge --no-ff -m "commit_message" dev # 不使用fast forward模式合并dev分支到當(dāng)前分支需要注意的是:
- 1.合并分支的時候如果出現(xiàn)沖突,那么將會出現(xiàn)沖突提醒,此時修改文件,解決沖突后再次提交就可以了
- 2.可以使用git log或者git log --graph指令來查看分支與分支合并情況
- 3.通常在合并分支時,一般都是用fast forward模式,但是不能執(zhí)行快速合并而且不會起沖突,這時合并之后就會做一次新的提交.
- 4.當(dāng)基于某個遠(yuǎn)程分支創(chuàng)建并切換到新的分支修改并commit之后,如果要提交到遠(yuǎn)程分支時,可以直接使用 git push 把本地分支的修改同步到遠(yuǎn)程倉庫的指定分支(如果不是基于遠(yuǎn)程master分支創(chuàng)建則同步到遠(yuǎn)程倉庫時也會同步到遠(yuǎn)程非master分支)
- 5.修復(fù)bug時,需要新建并切換到bug分支.bug修復(fù)并提交后,合并到主分支,然后將臨時bug分支刪除.此時把臨時bug分支快速合并到主分支后,臨時bug分支里的提交信息就會消失,此時可以不使用快速合并,使用遞歸合并的方式將臨時bug分支提交到主分支,這樣臨時bug分支里的提交信息也可以保留
5.版本回退
git reset --hard HEAD^ 回退到上一個版本 git reset --hard HEAD^^ 回退到上兩個版本 git reset --hard 123456 回退到版本號為123456的版本 git reset --hard commit_id^ 回退到指定commit_id的版本-
注意
- HEAD^為上上一個版本,HEAD表示當(dāng)前版本
- 使用git reset命令回退后,再使用log命令將只能獲得當(dāng)前HEAD版本之前的版本,此時可以使用git reflog找到比當(dāng)前版本新的版本的commit id就可以回滾回去了
- log命令可以查看提交歷史,reflog可以查看命令歷史
6.忽略文件的推送
有的時候,提交推送的時候不想提交某些文件,此時可以在這個項目根目錄下新建一個名為.gitignore的文件,
在這個文件里可以進(jìn)行配置提交的時候忽略哪些文件,配置使用正則表達(dá)式的形式.
比如:
配置完成后,需要清除本地緩存,然后再次提交.
清除本地緩存的命令:
git rm -f --cached .7.git diff命令
git diff # 比較工作區(qū)和暫存區(qū)所有文件的差異 git diff 3c6fab966158f9 72ec71f3c2aa # 比較兩次提交的差異 git diff HEAD HEAD~1 # git上一次提交與上上一次提交的差異 git diff HEAD HEAD^1^1 # git上一次提交與前兩次提交的差異 git diff HEAD HEAD~2 # git上一次提交與前兩次提交的差異 git diff HEAD HEAD^1 # git上一次提交與上上一次提交的差異 git diff HEAD HEAD^1 -- index.html # git上一次提交與上上一次提交中index.html文件的不同 git diff -- index.html # 比較工作區(qū)和暫存區(qū)中的index.html文件的差異 git diff --cached # 修改文件后,把修改的文件添加到暫存區(qū)中,查看暫存區(qū)和HEAD文件的差異 git diff master dev # 比較master分支和dev分支的差異 git diff master dev -- index.html # 比較index.html文件在master分支和dev分支的差異兩個分支的位置不同,顯示文件的加減是不同的
8.修改提交的commit
git commit --amend # 修改最新提交的commit信息9.git rebase操作
9.1 修改任何commit的message信息的步驟
1.列出所有的提交日志
git log --oneline # 每行顯示一條提交記錄 git log --pretty=oneline gitk # 圖形化顯示所有提交記錄2.進(jìn)入修改交互模式
git rebase -i 版本號這里的版本號為:要修改提交信息的版本號的上一個版本號。例如:按提交順序從1到6,如果想修改版本4的提交信息,則此處的版本號應(yīng)該為第3個版本號
3.進(jìn)入交互模式后,會有如下提示:
并列出在進(jìn)入交互式模式時輸入的版本號后的所有提交信息,把想修改的信息之前的pick修改為 r 或者 reword,然后:wq保存并退出
此時會打開想修改的commit的message信息,按vim編輯器的用法修改保存就可以
4.查看修改之后的commit message
前提是必須要配置全局用戶名和用戶郵箱
9.2 把連續(xù)的多個commit合并成一個commit
1.查看所有提交記錄
git log --oneline2.進(jìn)入git交互式模式
git rebase -i 版本號這里的版本號為:要修改提交信息的版本號的上一個版本號。例如:按提交順序從1到6,如果想合并版本4和版本5的提交信息,則此處的版本號應(yīng)該為第3個版本號
3.進(jìn)入交互模式后,會有如下提示:
并列出在進(jìn)入交互式模式時輸入的版本號后的所有提交信息,把被合并的版本號的commit信息前的pick換成 s 或 squash,然后保存并退出
此時會打開合并后的commit提交信息窗口,按vim編輯器的用法修改保存就可以
4.查看修改之后的commit message
git log可以看到把多個commit合并成一個commit后,所有提交的版本號都改變了
例子:現(xiàn)在有多次提交的版本號v1,版本號v2,版本號v3,版本號v4,版本號v5,版本號v6,想把v2和v3,v4這三次提交合并成一個新的提交,操作步驟:
git rebase -i v1 在打開的文件中,把v2和v3前面的pick修改成s,然后保存并退出 在新打開的窗口中,把未注釋的行的內(nèi)容修改為合并后想要的新內(nèi)容,然后保存并退出 使用git log命令查看,就可以看到合并后的提交信息了總結(jié)
以上是生活随笔為你收集整理的git的学习笔记(一):git本地操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pay支付页面
- 下一篇: Office LTSC 2021离线安装