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