git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区
每天一Git之簡單理解工作區和暫存區
1. 工作區與暫存區命令初體驗
1.1. 暫存區文件與文件夾管理
[root@number ~]# cd GitDir/git_learning/ [root@number git_learning]# ls readme.md [root@number git_learning]# pwd /root/GitDir/git_learning [root@number git_learning]# echo "Index File" >> index.html [root@number git_learning]# mkdir images [root@number git_learning]# ls images index.html readme.md [root@number git_learning]# git status On branch master Untracked files:(use "git add <file>..." to include in what will be committed)index.html nothing added to commit but untracked files present (use "git add" to track) [root@number git_learning]# ls images index.html readme.md [root@number git_learning]# cd images/ [root@number images]# git status On branch master Untracked files:(use "git add <file>..." to include in what will be committed)../index.html操作解釋:- 進入我們的工程項目的目錄
- 創建一個新的index文件
- 創建一個新的目錄
- 查看一下目前工作區和暫存區的狀態
- 進入到images目錄,查看一下目前工作區和暫存區的狀態
這里我們經過一系列行云流水的操作,發現一個小問題,就是我們增加的index文件在查看工作區和暫存區狀態時候,發現Untracked files只有index.html,但是images目錄卻沒有。難道得去images指定git status才能看到差異?于是我們進入到images目錄,再次執行git status,發現還是沒有,為什么呢?我們這里先賣個關子,我們繼續嘗試下面的操作再解釋。
[root@number git_learning]# cd images/ [root@number images]# ls Nginx.jpg [root@number images]# cd .. [root@number git_learning]# ls images index.html readme.md [root@number git_learning]# git status On branch master Untracked files:(use "git add <file>..." to include in what will be committed)images/index.htmlnothing added to commit but untracked files present (use "git add" to track)這里我們使用文件傳輸工具在images目錄下上傳了一個Nginx.jpg文件,然后我們在項目Git的目錄執行了git status命令后,發現Untracked files多了個images目錄,這里上面的問題也就可以合理的解釋了,也就是說再Git看來,如果你是空的文件夾或者目錄,對Git來說是不會納入管理的,只有目錄是非空的時候,才會納入管理,畢竟空目錄確實沒有實際意義。1.2. 從工作區到暫存區
將工作區的文件納入到暫存區管理
[root@number git_learning]# git status On branch master Untracked files:(use "git add <file>..." to include in what will be committed)images/index.htmlnothing added to commit but untracked files present (use "git add" to track) [root@number git_learning]# git add images/ index.html [root@number git_learning]# git status On branch master Changes to be committed:(use "git restore --staged <file>..." to unstage)new file: images/Nginx.jpgnew file: index.html1.3. Add到暫存區反悔了怎么辦?
我們在做項目Coding的時候,難免之前寫的東西不想要了,但是還沒有commit到版本庫中,僅僅存在了暫存區,那么我們如何操作?沒關系很簡單,使用git rm命令即可操作。[root@number git_learning]# touch a.txt [root@number git_learning]# git status On branch master Changes to be committed:(use "git restore --staged <file>..." to unstage)new file: images/Nginx.jpgnew file: index.htmlUntracked files:(use "git add <file>..." to include in what will be committed)a.txt [root@number git_learning]# git add a.txt [root@number git_learning]# git status On branch master Changes to be committed:(use "git restore --staged <file>..." to unstage)new file: a.txtnew file: images/Nginx.jpgnew file: index.html [root@number git_learning]# git rm a.txt error: the following file has changes staged in the index:a.txt (use --cached to keep the file, or -f to force removal) [root@number git_learning]# git rm a.txt --cached rm 'a.txt' [root@number git_learning]# git status On branch master Changes to be committed:(use "git restore --staged <file>..." to unstage)new file: images/Nginx.jpgnew file: index.htmlUntracked files:(use "git add <file>..." to include in what will be committed)a.txt操作解釋:
- 創建一個a.txt文件
- 將a.txt文件add到暫存區
- 將a.txt從暫存區剔除
- 使用--cached或者-f參數強制刪除(這里的刪除是從暫存區刪除而不是真正的刪除文件哦)
1.4. 正式提交,生成版本庫信息
提交其實很簡單,上一篇文章中也是用過這個commit命令,下面我們通過提交和查看log來演示一下
[root@number git_learning]# git commit -m'Add index.html+imagesDir' [master 365aa4e] Add index.html+imagesDir2 files changed, 1 insertion(+)create mode 100644 images/Nginx.jpgcreate mode 100644 index.html [root@number git_learning]# git log commit 365aa4eabc17a08a32cfdfb7d20215da5b3ff155 (HEAD -> master) Author: zhangzhao <zhangzhao@goldwind.com.cn> Date: Mon Jul 20 14:37:55 2020 +0800Add index.html+imagesDircommit 053d5d4318aef8be530074efd7bda3e742f5ad84 Author: zhangzhao <zhangzhao@goldwind.com.cn> Date: Fri Jul 17 19:07:57 2020 +0800Add readme2. Git區域的理解
2.1. 區域
我們在使用Git的時候一般有3個工作區的概念:Git 倉庫、工作目錄以及暫存區域。其中工作目錄比較好理解,就是我們開發時修改文件的那些目錄,Git 倉庫就是我們項目目錄下面的 .git目錄中的內容,而暫存區域是保存已經被Git標記過,將要提交保存到Git數據庫中的文件的地方。
Git 本地數據管理,大概可以分為三個區,工作區,暫存區和版本庫。
- 工作區(Working Directory) 其實就是我們自己本機上Git項目的工作目錄,也就是我們保存項目文件的目錄,這里就是我們的工作區,顧名思義就是我們工作的地區嘛,簡單來講就是工作區
- 暫存區(Stage 或 Index) 數據暫時存放的區域,我們從工作區Add文件或者目錄的區域就是暫存區
- 版本庫(commit History) 存放已經提交的數據,其實就是我們本地的版本庫,我們push代碼到GitLab或者GitHub的時候,就是把這個區的數據 push 到遠程git倉庫了。
我畫了一張簡單的圖,來方便大家理解Git三個區域的關系,其中也拓展了遠程倉庫的內容
2.2. 文件操作
文件從我們創建到編輯完提交Git幫我們記錄,一共要經歷3種狀態:已修改(modified)、 已暫存(staged)和已提交(committed)
[root@number git_learning]# echo "modified index" >> index.html [root@number git_learning]# git status On branch master Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: index.html no changes added to commit (use "git add" and/or "git commit -a") [root@number git_learning]# git add index.html [root@number git_learning]# git status On branch master Changes to be committed:(use "git restore --staged <file>..." to unstage)modified: index.html[root@number git_learning]# git commit -m'Modified index.html' [master 7cf8e5a] Modified index.html1 file changed, 1 insertion(+) [root@number git_learning]# git status On branch master nothing to commit, working tree clean- 剛剛開始時編輯文件,這個時候文件是處于 已修改(modified) 狀態,文件是在工作目錄
- 修改完文件,我們執行git add,這個時候文件就變為 已暫存(staged)狀態,文件信息進入暫存區域,內容被保存到Git數據庫中
- 然后我們執行git commit,文件就變為已提交(committed)狀態,創建了一個提交記錄保存到了Git 倉庫
知識點補充:
git diff 工作區 vs 暫存區 git diff head 工作區 vs 版本庫 git diff –cached 暫存區 vs 版本庫2.3. 三大分區的好處
我們可以通過 checkout/stash/reset 等命令,通過不同的參數搭配使用,可以在工作區,暫存區和版本庫之間,輕松進行數據的來回切換。
修改了多個文件,在不放棄任何修改的情況下,其中一個文件不想提交,如何操作?- 沒add操作: git add 想提交的文件- 已經add操作:git reset –soft 將文件從暫存區回滾到工作區,重新add 修改到一半的文件,突然間不需要或者放棄修改了,怎么恢復未修改前文件?- git checkout 代碼寫一半,被打斷去做其他功能開發,未完成代碼保存?- git stash 提交到緩存區 代碼寫一半,發現忘記切換分支了?- git stash & git checkout 代碼需要回滾了?- git reset命令解釋及作用
git reset –soft commit_xxid - 暫存區->工作區 將commit_xxid提交從暫存區回滾到工作區 git reset –mixed commit_xxid 版本庫->暫存區- 將commit_xxid提交從版本庫回滾到暫存區 git reset –hard commit_xxid - 版本庫->暫存區->工作區 三個區都清除commit_xxid提交總結
以上是生活随笔為你收集整理的git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: json spr路驾驶技术视频api_每
- 下一篇: 画出该lti系统的幅频特性响应曲线_模拟