【学习笔记】git 使用文档
安裝 git
# mac 環(huán)境
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 命令
- 對(duì)一個(gè)空文件,git 初始化。文件名稱(chēng)增加了’git:(master)’,說(shuō)明初始化成功了。
? mygit git init
Initialized empty Git repository in /Users/maimai/Documents/Demo/mygit/.git/
? mygit git:(master)
- 查看當(dāng)前文件目錄結(jié)構(gòu)。發(fā)現(xiàn)原空文檔下,多了一個(gè).git文件夾。
? mygit git:(master) tree -a
.
└── .git├── HEAD # 包含了一個(gè)分支的引用,通過(guò)這個(gè)文件Git可以得到下一次commit的parent,可以理解為指針├── config # git倉(cāng)庫(kù)的配置文件├── description # 倉(cāng)庫(kù)的描述信息,主要給gitweb等git托管系統(tǒng)使用├── hooks # 存放一些shell腳本,可以設(shè)置特定的git命令后觸發(fā)相應(yīng)的腳本│ ├── 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 # 存放倉(cāng)庫(kù)的一些信息│ └── exclude├── objects # 存放所有的git對(duì)象│ ├── info│ └── pack└── refs├── heads # 保存當(dāng)前最新的一次提交的哈希值└── tags
查看部分文件:
? mygit git:(master) cat .git/HEAD # 下一次commit的parent
ref: refs/heads/master
? mygit git:(master) cat .git/config # git倉(cāng)庫(kù)的配置文件
[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = trueignorecase = trueprecomposeunicode = true
取消 git init 操作的命令為
rm -rf .git。git 初始化本質(zhì)是增加了一個(gè).git文件,刪除之后即取消了初始化。
文件的狀態(tài)變化周期
untracked:未跟蹤狀態(tài) —— 工作區(qū)增加新文件s, 但并沒(méi)有加入到 git 庫(kù), 不參與版本控制。通過(guò) git add 命令變?yōu)?staged狀態(tài)。staged: 已暫存狀態(tài) —— 對(duì)已修改文件的當(dāng)前版本做了標(biāo)記,存放在一個(gè)不可見(jiàn)的暫存區(qū)域,做為下次提交的內(nèi)容的一部分。執(zhí)行g(shù)it commit則將修改同步到庫(kù)中.unmodified:未修改狀態(tài) —— 文件已入庫(kù), 即版本庫(kù)中的文件快照內(nèi)容與文件夾中完全一致。modified: 已修改狀態(tài) —— 在工作目錄下修改了文件。
查看初始狀態(tài)
初始狀態(tài),工作區(qū)為最新代碼,.git 文件保存版本庫(kù)和暫存區(qū)內(nèi)容【初始化的 git 項(xiàng)目,無(wú)暫存區(qū)】
? mygit git:(master) git status # 初始狀態(tài)
On branch masterNo commits yetnothing to commit (create/copy files and use "git add" to track)
增加文件
初始狀態(tài),增加文件 README.md 后,由初始狀態(tài)轉(zhuǎn)化為 untracked 狀態(tài)(修改也存在的文件,狀態(tài)更新為 modified)
修改內(nèi)容僅存在本地工作區(qū),版本庫(kù)和暫存區(qū)都與master保持一致,未被修改【.git文件夾未更新】
? mygit git:(master) vi README.md
? mygit git:(master) ? tree # 查看文檔結(jié)構(gòu),其中添加了一個(gè)文件
.
└── README.md0 directories, 1 file
? mygit git:(master) ? git status # 增加文件后,查看git狀態(tài),更換為 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 . 命令,將工作區(qū)中的修改文件 README.md 放進(jìn)暫存區(qū)。此時(shí)處于暫存區(qū)的 README.md 文件處于staged狀態(tài)【.git 目錄下增加 index 和 objects/d6/1d841cf82eef2774ac3e57fb5072b9ef67b4fb】
? mygit git:(master) ? git add README.md # 使用 add 命令,將修改內(nèi)容放進(jìn)暫存區(qū)
? mygit git:(master) ? git status # add 命令后,原 untracked 狀態(tài)修改為committed
On branch masterNo commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: README.md
查看此時(shí) mygit 的結(jié)構(gòu),發(fā)現(xiàn) .git 文件夾下多了一個(gè)index的文件。
? mygit git:(master) ? tree -a
.
├── .git # 保存項(xiàng)目的元數(shù)據(jù)、版本和分支的地方
│ ├── 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 # 暫存區(qū)。Git 術(shù)語(yǔ)叫做“索引”
│ ├── info
│ │ └── exclude
│ ├── objects # 對(duì)象數(shù)據(jù)庫(kù)
│ │ ├── 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 命令可以查看暫存區(qū)內(nèi)容
? mygit git:(master) ? git ls-files --stage
100644 0d862c702122bb62b6c21a2fc2f83128aa5a57b3 0 README.md
git丟棄本地修改
git checkout . && git clean -xdf
git commit -m
使用 git commit 命令,將暫存區(qū)的目錄樹(shù)寫(xiě)到版本庫(kù)中。處于 staged 狀態(tài)的 README.md 處于unmodified 狀態(tài)。
? 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 # 暫存區(qū)的文件寫(xiě)入.git文件
On branch master
nothing to commit, working tree clean
非初次提交狀態(tài),使用
git commit -a -m 'xxx'可替代git add和git commit過(guò)程。直接從本地提交到版本庫(kù)
git rm / git restore
修改文件并提交到暫存區(qū)后,使用 git rm --cached {filename} 命令 或 git restore --staged {filename},直接從暫存區(qū)刪除文件,工作區(qū)修改保持不變
? 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},工作區(qū)的全部或指定文件被替換為暫存區(qū)中的文件。工作區(qū)的被更新的文件或存在被覆蓋的風(fēng)險(xiǎn)。
? 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 .命令,會(huì)用 HEAD 指向的master分支中全部或部分文件替換暫存區(qū)及工作區(qū)的文件。
cat .gitignore # 忽略某些文件
git diff # 查看尚未暫存的文件更新了哪些部分
git diff --cached # 查看已暫存的文件與上次提交的快照之間的差異
git commit # 提交更新
git commit -a -m 'first initial' # 跳過(guò)使用暫存區(qū)域的方式,自動(dòng)將已跟蹤過(guò)的文件暫存起來(lái)一并提交
git rm -f a.test # 從git強(qiáng)制移除文件a.text
git rm --cached readme.txt
git restore --staged readme.txt
總結(jié)
以上是生活随笔為你收集整理的【学习笔记】git 使用文档的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python 数据库操作 psycopg
- 下一篇: 2018湖湘杯海选复赛Writeup