【学习笔记】git 使用文档
安裝 git
# mac 環境
brew install git
檢查是否安裝成功
? ~ git --version
git version 2.20.1 (Apple Git-117)
卸載 git
? ~ which -a git
/usr/bin/git
? ~ cd /usr/bin
? bin sudo rm -rf git*
git init 命令
- 對一個空文件,git 初始化。文件名稱增加了’git:(master)’,說明初始化成功了。
? mygit git init
Initialized empty Git repository in /Users/maimai/Documents/Demo/mygit/.git/
? mygit git:(master)
- 查看當前文件目錄結構。發現原空文檔下,多了一個.git文件夾。
? mygit git:(master) tree -a
.
└── .git├── HEAD # 包含了一個分支的引用,通過這個文件Git可以得到下一次commit的parent,可以理解為指針├── config # git倉庫的配置文件├── description # 倉庫的描述信息,主要給gitweb等git托管系統使用├── hooks # 存放一些shell腳本,可以設置特定的git命令后觸發相應的腳本│ ├── applypatch-msg.sample│ ├── commit-msg.sample│ ├── fsmonitor-watchman.sample│ ├── post-update.sample│ ├── pre-applypatch.sample│ ├── pre-commit.sample│ ├── pre-push.sample│ ├── pre-rebase.sample│ ├── pre-receive.sample│ ├── prepare-commit-msg.sample│ └── update.sample├── info # 存放倉庫的一些信息│ └── exclude├── objects # 存放所有的git對象│ ├── info│ └── pack└── refs├── heads # 保存當前最新的一次提交的哈希值└── tags
查看部分文件:
? mygit git:(master) cat .git/HEAD # 下一次commit的parent
ref: refs/heads/master
? mygit git:(master) cat .git/config # git倉庫的配置文件
[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = trueignorecase = trueprecomposeunicode = true
取消 git init 操作的命令為
rm -rf .git。git 初始化本質是增加了一個.git文件,刪除之后即取消了初始化。
文件的狀態變化周期
untracked:未跟蹤狀態 —— 工作區增加新文件s, 但并沒有加入到 git 庫, 不參與版本控制。通過 git add 命令變為staged狀態。staged: 已暫存狀態 —— 對已修改文件的當前版本做了標記,存放在一個不可見的暫存區域,做為下次提交的內容的一部分。執行git commit則將修改同步到庫中.unmodified:未修改狀態 —— 文件已入庫, 即版本庫中的文件快照內容與文件夾中完全一致。modified: 已修改狀態 —— 在工作目錄下修改了文件。
查看初始狀態
初始狀態,工作區為最新代碼,.git 文件保存版本庫和暫存區內容【初始化的 git 項目,無暫存區】
? mygit git:(master) git status # 初始狀態
On branch masterNo commits yetnothing to commit (create/copy files and use "git add" to track)
增加文件
初始狀態,增加文件 README.md 后,由初始狀態轉化為 untracked 狀態(修改也存在的文件,狀態更新為 modified)
修改內容僅存在本地工作區,版本庫和暫存區都與master保持一致,未被修改【.git文件夾未更新】
? mygit git:(master) vi README.md
? mygit git:(master) ? tree # 查看文檔結構,其中添加了一個文件
.
└── README.md0 directories, 1 file
? mygit git:(master) ? git status # 增加文件后,查看git狀態,更換為 untracked
On branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed)README.mdnothing added to commit but untracked files present (use "git add" to track)
git add .
使用 git add . 命令,將工作區中的修改文件 README.md 放進暫存區。此時處于暫存區的 README.md 文件處于staged狀態【.git 目錄下增加 index 和 objects/d6/1d841cf82eef2774ac3e57fb5072b9ef67b4fb】
? mygit git:(master) ? git add README.md # 使用 add 命令,將修改內容放進暫存區
? mygit git:(master) ? git status # add 命令后,原 untracked 狀態修改為committed
On branch masterNo commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: README.md
查看此時 mygit 的結構,發現 .git 文件夾下多了一個index的文件。
? mygit git:(master) ? tree -a
.
├── .git # 保存項目的元數據、版本和分支的地方
│ ├── HEAD
│ ├── config
│ ├── description
│ ├── hooks
│ │ ├── applypatch-msg.sample
│ │ ├── commit-msg.sample
│ │ ├── fsmonitor-watchman.sample
│ │ ├── post-update.sample
│ │ ├── pre-applypatch.sample
│ │ ├── pre-commit.sample
│ │ ├── pre-merge-commit.sample
│ │ ├── pre-push.sample
│ │ ├── pre-rebase.sample
│ │ ├── pre-receive.sample
│ │ ├── prepare-commit-msg.sample
│ │ └── update.sample
│ ├── index # 暫存區。Git 術語叫做“索引”
│ ├── info
│ │ └── exclude
│ ├── objects # 對象數據庫
│ │ ├── d6
│ │ │ └── 1d841cf82eef2774ac3e57fb5072b9ef67b4fb
│ │ ├── info
│ │ └── pack
│ └── refs
│ ├── heads
│ └── tags
└── README.md10 directories, 19 files
? mygit git:(master) ? cat .git/index
DIRC_?E$Ya�_?E$Ya�<��������.�'t�>W�Pr��g�� README.md`��\A�k�$�����mdU%
使用 git ls-files --stage 命令可以查看暫存區內容
? mygit git:(master) ? git ls-files --stage
100644 0d862c702122bb62b6c21a2fc2f83128aa5a57b3 0 README.md
git丟棄本地修改
git checkout . && git clean -xdf
git commit -m
使用 git commit 命令,將暫存區的目錄樹寫到版本庫中。處于 staged 狀態的 README.md 處于unmodified 狀態。
? mygit git:(master) ? git commit -m 'first initial' # 提交更新
[master (root-commit) 9d5ae58] first initial1 file changed, 1 insertion(+)create mode 100644 README.md
? mygit git:(master) git status # 暫存區的文件寫入.git文件
On branch master
nothing to commit, working tree clean
非初次提交狀態,使用
git commit -a -m 'xxx'可替代git add和git commit過程。直接從本地提交到版本庫
git rm / git restore
修改文件并提交到暫存區后,使用 git rm --cached {filename} 命令 或 git restore --staged {filename},直接從暫存區刪除文件,工作區修改保持不變
? mygit git:(master) ? git rm --cached README.md
rm 'README.md'
? mygit git:(master) ? git status
On branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed)README.mdnothing added to commit but untracked files present (use "git add" to track)
git checkout
使用 git chekout . 命令 或 git chekout -- {filename},工作區的全部或指定文件被替換為暫存區中的文件。工作區的被更新的文件或存在被覆蓋的風險。
? mygit git:(master) vi demo1.py
? mygit git:(master) ? python demo1.py
hello word!
? mygit git:(master) ? git checkout .
Updated 1 path from the index
? mygit git:(master) git status
On branch master
nothing to commit, working tree clean
? mygit git:(master) ls
README.md demo1.py
? mygit git:(master) cat demo1.py
? mygit git:(master)
git checktout HEAD .或git checktout HEAD .命令,會用 HEAD 指向的master分支中全部或部分文件替換暫存區及工作區的文件。
cat .gitignore # 忽略某些文件
git diff # 查看尚未暫存的文件更新了哪些部分
git diff --cached # 查看已暫存的文件與上次提交的快照之間的差異
git commit # 提交更新
git commit -a -m 'first initial' # 跳過使用暫存區域的方式,自動將已跟蹤過的文件暫存起來一并提交
git rm -f a.test # 從git強制移除文件a.text
git rm --cached readme.txt
git restore --staged readme.txt
總結
以上是生活随笔為你收集整理的【学习笔记】git 使用文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 数据库操作 psycopg
- 下一篇: 2018湖湘杯海选复赛Writeup