Git 笔记:基本操作工作流程
1 git 工作流程
一般工作流程如下:
- 克隆 Git 資源作為工作目錄。
- 在克隆的資源上添加或修改文件。
- 如果其他人修改了,你可以更新資源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果發(fā)現(xiàn)錯誤,可以撤回提交并再次修改并提交。
2 Git 基本操作
Git 的工作就是創(chuàng)建和保存你項目的快照,以及與之后項目的快照進行對比。
2.1 git 創(chuàng)建倉庫
????????使用?git init?命令來初始化一個 Git 倉庫,Git 的很多命令都需要在 Git 的倉庫中運行,所以?git init?是使用 Git 的第一個命令。
????????所有 Git 需要的數(shù)據(jù)和資源都存放在創(chuàng)建的.get文件夾中。
git init? ? ? ? ?會在當(dāng)前目錄下創(chuàng)建一個.git文件夾(前面說的版本庫)
git init new在當(dāng)前目錄下新建一個new 文件夾,在new文件夾里面創(chuàng)建一個.git 文件夾
?2.2?git clone
????????使用?git clone?從現(xiàn)有 Git 倉庫中拷貝項目XXX
git clone XXXgit clone https://github.com/liuwj2000/ls.git git clone https://github.com/liuwj2000/ls? ? ? ? 如果我們需要拷貝到指定的目錄?YYY,可以使用如下命令
git clone XXX YYY2.3 git add
????????git add?命令可將該文件添加到暫存區(qū)。
????????如果當(dāng)前目錄下有幾個文件想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些文件進行跟蹤,然后用git commit提交:
git add *.c git add README git commit -m "初始化項目版本"?????????以上命令將目錄下以 .c 結(jié)尾及 README 文件提交到倉庫中。
2.3.1 添加多個文件
git add [file1] [file2] ...2.3.2?添加指定目錄到暫存區(qū)(包括子目錄):
git add [dir]2.3.3??添加當(dāng)前目錄下的所有文件到暫存區(qū):
git add .2.4 git status
?git status 命令用于查看在你上次提交之后是否有對文件進行再次修改。
比如我創(chuàng)建了3個文件 1.txt? 2.txt? 3.txt,將 1.txt和2.txt git add 到暫存區(qū),然后我在命令行中輸入
git status那么有:
?2.4.1 git status -s
獲得簡短的輸出結(jié)果
??表示沒有g(shù)it add
?A表示 已經(jīng)git add了
2.4.2 修改了已經(jīng)git add 的file,但是沒有再次git add?
如果我們修改了1.txt,但是沒有再git add,會怎么樣呢?
git status 是多了中間這一段:
git status -s 的話,是 1.txt 的狀態(tài)變成了AM
AM?狀態(tài)的意思是這個文件在我們將它添加到緩存之后又有改動
2.5 git diff
2.5.1 git diff 內(nèi)容理解
2.5.2?git diff
- 當(dāng)工作區(qū)有改動,暫存區(qū)為空,git diff的對比是“工作區(qū)與最后一次commit提交的倉庫的共同文件”
- 當(dāng)工作區(qū)有改動,暫存區(qū)不為空,diff對比的是“工作區(qū)與暫存區(qū)的共同文件”。
2.5.3?git diff --cached /?git diff --staged
對比暫存區(qū)(已add但未commit文件)和最后一次commit(HEAD)之間的所有不相同文件
2.5.4?git diff HEAD
對比工作區(qū)與最后一次commit之間的所有不相同文件
2.5.5?git diff HEAD~X或git diff HEAD^^^…(后面有X個^符號,X為正整數(shù))
對比近一次提交的版本與 倒數(shù)第X個版本的所有不相同文件
2.5.6?git diff <分支名1> <分支名2>?
比較兩個分支上最后 commit 的內(nèi)容的差別
2.6 git commit
????????使用 git add 命令將內(nèi)容寫入暫存區(qū)。
????????git commit 命令則將暫存區(qū)內(nèi)容添加到本地倉庫中。
2.6.1 基本用法
提交暫存區(qū)到本地倉庫中:
git commit -m [message]?[message] 可以是一些備注信息。
如果你沒有設(shè)置 -m 選項,Git 會嘗試為你打開一個編輯器以填寫提交信息。
?提交暫存區(qū)的指定文件到倉庫區(qū):
git commit [file1] [file2] ... -m [message]2.6.2 -a?
-a?參數(shù)設(shè)置修改文件后不需要執(zhí)行 git add 命令,直接來提交
git commit -a????????在 Linux 系統(tǒng)中,commit 信息使用單引號?',Windows 系統(tǒng),commit 信息使用雙引號?"。
????????所以在linux中,我們需要?git commit -m 'XXX' ,在 Windows中,我們需要 git commit -m "XXX"。
2.7 git reset
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
2.7.1 --mixed
--mixed?為默認(rèn),可以不用帶該參數(shù).
用于重置暫存區(qū)的文件與上一次的提交(commit)保持一致,工作區(qū)文件內(nèi)容保持不變。
2.7.2 --soft
用于回退到某個版本
2.7.3 --hard
????????撤銷工作區(qū)中所有未提交的修改內(nèi)容,將暫存區(qū)與工作區(qū)都回到上一次版本,并刪除之前的所有信息提交:
2.7.4 基本用法
git reset [HEAD]| HEAD | HEAD~0? | 當(dāng)前版本 (最典型的用法就是 git reset HEAD了,表示取消已經(jīng)暫存的內(nèi)容) (換言之,git reset 的作用 |
| HEAD^ | HEAD~1? | 上一個版本 |
| HEAD^^? | HEAD^2? | 上上一個版本 |
| HEAD^^^ | HEAD^3 | ?上上上一個版本 |
| 以此類推 | ||
?2.8 git rm
用于刪除文件
| git rm <file> | 將文件從暫存區(qū)和工作區(qū)中刪除 |
| git rm -f <file> | 如果刪除之前修改過并且已經(jīng)放到暫存區(qū)域的話,則必須要用強制刪除選項?-f。 強行從暫存區(qū)和工作區(qū)中刪除修改后的 runoob.txt 文件: |
| git rm --cached <file> | 把文件從暫存區(qū)域移除,但仍然希望保留在當(dāng)前工作目錄中 |
?2.9 git mv
用于移動或重命名一個文件、目錄或軟連接
git mv [file] [newfile]3??Git 工作區(qū)、暫存區(qū)和版本庫
| 工作區(qū) | 在電腦里能看到的目錄 |
| 暫存區(qū)(stage ,index) | 一般存放在?.git?目錄下的 index 文件(.git/index)中,所以我們把暫存區(qū)有時也叫作索引(index)。 |
| 版本庫 | 工作區(qū)有一個隱藏目錄?.git,這個不算工作區(qū),而是 Git 的版本庫。 |
3.1?工作區(qū)、暫存區(qū)和版本庫之間的關(guān)系?
-
圖中左側(cè)為工作區(qū),右側(cè)為版本庫。在版本庫中標(biāo)記為 "index" 的區(qū)域是暫存區(qū)(stage/index),標(biāo)記為 "master" 的是 master 分支所代表的目錄樹。
-
圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"游標(biāo)"。所以圖示的命令中出現(xiàn) HEAD 的地方可以用 master 來替換。
-
圖中的 objects 標(biāo)識的區(qū)域為 Git 的對象庫,實際位于 ".git/objects" 目錄下,里面包含了創(chuàng)建的各種對象及內(nèi)容。
-
當(dāng)對工作區(qū)修改(或新增)的文件執(zhí)行?git add?命令時,暫存區(qū)(index)的目錄樹被更新,同時工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區(qū)的文件索引中。
-
當(dāng)執(zhí)行提交操作(git commit)時,暫存區(qū)(index)的目錄樹寫到版本庫(對象庫)中,master 分支會做相應(yīng)的更新。即 master 指向的目錄樹就是提交時暫存區(qū)的目錄樹。
-
當(dāng)執(zhí)行?git reset HEAD?命令時,暫存區(qū)(index)的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響。
-
當(dāng)執(zhí)行?git rm --cached <file>?命令時,會直接從暫存區(qū)(index)刪除文件,工作區(qū)則不做出改變。
-
當(dāng)執(zhí)行?git checkout .?或者?git checkout -- <file>?命令時,會用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個操作很危險,會清除工作區(qū)中未添加到暫存區(qū)中的改動。
-
當(dāng)執(zhí)行?git checkout HEAD .?或者?git checkout HEAD <file>?命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)以及工作區(qū)中的文件。這個命令也是極具危險性的,因為不但會清除工作區(qū)中未提交的改動,也會清除暫存區(qū)中未提交的改動。
4 git 配置(git config)
git config 專門用來配置或讀取相應(yīng)的工作環(huán)境變量。
這些環(huán)境變量,決定了 Git 在各個環(huán)節(jié)的具體工作方式和行為。
4.1 三種配置
這些環(huán)境變量可以存放在以下三個不同的地方:
| /etc/gitconfig?文件 | 系統(tǒng)中對所有用戶都普遍適用的配置。 若使用?git config?時用?--system?選項,讀寫的就是這個文件。 |
| ~/.gitconfig?文件: | 用戶目錄下的配置文件只適用于該用戶。 若使用?git config?時用?--global?選項,讀寫的就是這個文件。 |
| .git/config?文件 | 當(dāng)前項目的 Git 目錄中的配置文件 這里的配置僅僅針對當(dāng)前項目有效。 |
????????每一個級別的配置都會覆蓋上層的相同配置,所以?.git/config?里的配置會覆蓋~/.gitconfig?和?/etc/gitconfig?中的同名變量。
4.2 配置用戶信息
配置個人的用戶名稱和電子郵件地址:
(設(shè)置提交代碼時的用戶信息)
?如果用了?--global?選項,那么更改的配置文件就是位于你用戶主目錄下的那個,以后你所有的項目都會默認(rèn)使用這里配置的用戶信息。
如果要在某個特定的項目中使用其他名字或者電郵,只要去掉 --global 選項重新配置即可,新的設(shè)定保存在當(dāng)前項目的 .git/config 文件里。
4.3 查看配置信息
git config --list在配置里面,可以看到剛才配置的name和e-mail信息
?4.3.1 查看特定配置信息
5 從github上下載單個文件
將網(wǎng)址復(fù)制到GitZip (kinolien.github.io)即可
參考資料:git diff的最全最詳細(xì)的4大主流用法_快樂李同學(xué)的博客-CSDN博客_gitdiff
Git 基本操作 | 菜鳥教程 (runoob.com)
總結(jié)
以上是生活随笔為你收集整理的Git 笔记:基本操作工作流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 错误处理: pip install 时候
- 下一篇: markdown 笔记