0. 前言
大家好,我是多選參數(shù)的程序員,一個(gè)正在 neng 操作系統(tǒng)耻讽、學(xué)數(shù)據(jù)結(jié)構(gòu)和算法以及 Java 的硬核菜雞。到今天為止帕棉,關(guān)于 Git 的大坑算是給填上了针肥。但是 Git 這個(gè)系列并不會(huì)結(jié)束饼记,程序員偶爾看到比較好的關(guān)于 Git 的文章也會(huì)整理一番發(fā)出來(lái),爭(zhēng)取在 Git 的坑上再長(zhǎng)棵樹(shù)慰枕。
1. 常用命令
1.1. git 配置
# 顯示 config 的配置 加--list
# 優(yōu)先級(jí):local > global > systemgit config --list --local # local 的范圍是某個(gè)倉(cāng)庫(kù)git config --list --global # global 的范圍是登錄的用戶git config --list --system # system 的范圍是系統(tǒng)所有登錄的用戶# 配置用戶 name 和 emailgit config --global user.name'your_name'
gitconfig --global user.email'your_email@domain.com'
# 清除配置信息git config --unset --global user.name
1.2. 倉(cāng)庫(kù)初始化
# 將執(zhí)行該命令時(shí)所在的目錄初始化為一個(gè) git 倉(cāng)庫(kù)(如:進(jìn)入某目錄后執(zhí)行該命令會(huì)將該目錄初始化為一個(gè) git 倉(cāng)庫(kù))
gitinit
# 會(huì)在當(dāng)前路徑下創(chuàng)建和項(xiàng)目名稱同名的文件夾具则,并將其初始化為 git 倉(cāng)庫(kù)gitinityour_project
1.3. git add
gitaddreadme.md# 將 readme.md 文件添加到暫存區(qū)
git add . # 將當(dāng)前工作目錄的所有文件添加到暫存區(qū)
git add -u # 把修改之后的文件(這些文件已經(jīng)被管理起來(lái)了)一次性提交到暫存區(qū)
1.4. git status
gitstatus# 查看工作目錄和暫存區(qū)的狀態(tài)
1.5. git commit
gitcommit -m'Add readme.md'# -m 指定 commit 的信息
git commit # 這時(shí)候會(huì)跳出一個(gè)文本輸入界面,讓你輸入更多的 commit 信息
1.6. git mv
gitmv readme readme.md# 將 git 管理的文件進(jìn)行重命名
1.7. git rm
gitrm filename# 從 git 管理的文件刪除某個(gè)已管理的文件具帮,同時(shí)把修改的情況添加到暫存區(qū)
1.8. git log
gitlog# 只查看當(dāng)前分支(Head所指的分支)的log情況
gitlog--oneline # 簡(jiǎn)潔的顯示版本更新信息
gitlog-n2? # n2 代表查看最近兩次commit歷史
gitlog-2#2代表查看最近兩次commit歷史
gitlog-n2 --oneline # 簡(jiǎn)潔的顯示最近兩次的版本更新信息
gitlogbranch_name # 后面跟上分支名表示查看該分支的log日志
gitlog-all # 列出所有分支的log
gitlog--all --graph # 以圖形化的方式查看
gitlog--oneline --all # 以簡(jiǎn)潔的方式查看所有分支的log
gitlog--oneline --all -n4# 以簡(jiǎn)潔的方式查看所有分支的log
git helplog# 以web的方式查看log的幫助文檔博肋,等同于
git help --weblog# 和上面那條效果一樣
2. 分支相關(guān)
gitbranch -v# 查看本地分支的詳細(xì)情況
git branch -a # 查看所有分支,包括遠(yuǎn)端分支蜂厅,但沒(méi)有過(guò)于詳細(xì)的信息
git branch -av # 查看所有分支情況
git branch branch_name hash_value # 創(chuàng)建一個(gè)新的分支匪凡,基于 hash_value 的這個(gè) commit 創(chuàng)建一個(gè)新的分支,hash_value 可以省略掘猿,那么默認(rèn)是基于當(dāng)前分支的最后一個(gè) commit 創(chuàng)建病游。
git branch -d branch_name
git branch -D branch_name? # 這個(gè)分支已經(jīng)有了一些 commit
git checkout branch_name # 切換分支
git checkout master
git checkout -b branch_name git_id # 創(chuàng)建一個(gè)新的分支并切換過(guò)去,git_id可以是hash_value稠通,也可以是某個(gè)分支的名字(分支的名字其實(shí)就指向了某個(gè) commit)
git checkout -b temp 9ef147d
git checkout -b temp2 master
git checkout hash_value? # 分離頭指針
3. 比較
gitdiff hash_value1 hash_value2# hash_value1 對(duì)應(yīng)的 comimit 和 hash_value2 對(duì)應(yīng)的 commit 進(jìn)行比較
git diff hash_value1 hash_value2 -- file_name1 file_name2 # 在上述基礎(chǔ)之上衬衬,只比較 file_name1、file_name2 這兩個(gè)文件
git diff branch_name1 branch_name2 # 對(duì)兩個(gè)分支進(jìn)行比較采记,也可以跟 -- 只看某些文件
git diff HEAD HEAD^? # HEAD 指向的 commit 與該 commit 的父親 commit 進(jìn)行比較
git diff HEAD HEAD^^ # HEAD 指向的 commit 與該 commit 的父親的父親 commit 進(jìn)行比較
git diff HEAD HEAD~? # HEAD 指向的 commit 與該 commit 的父親 commit 進(jìn)行比較
git diff HEAD HEAD~1 # 同上
git diff HEAD HEAD~2 # HEAD 指向的 commit 與該 commit 的父親的父親 commit 進(jìn)行比較
git diff --cached? # 暫存區(qū)和 HEAD 做比較佣耐,也可以跟 -- 只看某些文件
git diff? ? ? # 工作目錄和暫存區(qū)中所有文件進(jìn)行比較,也可以跟 -- 只看某些文件
4. 版本歷史更改
gitcommit --amend# 最近一次 commit 的 message 修改
git rebase -i hash_value # 交互文件中選擇 reword唧龄,老舊 commit 的 message 修改。hash_value奸远,是需要的 commit 的父親 commit 的 hash_value
git rabase -i hash_value # 交互文件中選擇 squash既棺,多個(gè)連續(xù) commit 合并成一個(gè),hash_value 同上
git rebase -i hash_value # 交互文件中選擇 squash懒叛,把間隔的 commit 移到一塊丸冕,即可合并成一個(gè),hash_value
git rebase origin/master # 把當(dāng)前分支基于 origin/master 做 rebase 操作薛窥,也就相當(dāng)于把當(dāng)前分支的東西加到 origin/master 中
5. 回滾操作
gitresetHEAD# 暫存區(qū)恢復(fù)成和 HEAD 一樣
git reset HEAD -- file_name1 file_name2 # 暫存區(qū)部分文件變得跟 HEAD 一樣
git checkout -- file_name # 工作目錄指定文件恢復(fù)為和暫存區(qū)一樣
git checkout -- *|. ## 工作目錄全部文件恢復(fù)為和暫存區(qū)一樣
git reset --hard hash_value # 把 HEAD胖烛、暫存區(qū)、工作目錄都回滾到 hash_value 所代表的 commit 中诅迷。
git reset --hard? # 把暫存區(qū)里面的修改去掉佩番,也就是讓暫存區(qū)、工作目錄默認(rèn)恢復(fù)到 HEAD 的位置
6. 工作目錄罢杉、暫存區(qū)狀態(tài)保存
gitstash# 把相應(yīng)的修改內(nèi)容給存下來(lái)趟畏,之后 git status 查看的話又變?yōu)槭裁炊紱](méi)改變的了
git stash list # 查看存下來(lái)的內(nèi)容
git stash apply # 存下來(lái)的內(nèi)容又恢復(fù)了,但是存下來(lái)的內(nèi)容還在 stash 中
git stash pop? # 存下來(lái)的內(nèi)容恢復(fù)了滩租,但是存下來(lái)的內(nèi)容也沒(méi)了
7. 合并
gitmergebranch_name1 branch_name2
gitmergehash_value1 hash_value2
gitmerge--squash # 以 squash 方式進(jìn)行 merge
8. Git 對(duì)象操作
gitcat-file -t|p|s hash_value# 顯示版本庫(kù)對(duì)象的內(nèi)容赋秀,類型及大小信息
git cat-file -t hash_value? # 查看版本庫(kù)對(duì)象的類型
git cat-file -p hash_value? # 查看版本庫(kù)對(duì)象的內(nèi)容
git cat-file -s hash_value? # 查看版本庫(kù)對(duì)象的大小
9. Git 遠(yuǎn)端操作
git remote add<遠(yuǎn)端名><遠(yuǎn)端倉(cāng)庫(kù)地址># 這邊遠(yuǎn)端名的意思是遠(yuǎn)端倉(cāng)庫(kù)的別名利朵,push、pull 都將用到遠(yuǎn)端名
git remote -v? # 查看遠(yuǎn)端倉(cāng)庫(kù)連接情況git remote set-url<遠(yuǎn)端名>你新的遠(yuǎn)程倉(cāng)庫(kù)地址 # 修改遠(yuǎn)端倉(cāng)庫(kù)地址
git remote rm<遠(yuǎn)端名># 刪除遠(yuǎn)端倉(cāng)庫(kù)
git clone<遠(yuǎn)端倉(cāng)庫(kù)地址># 把遠(yuǎn)端倉(cāng)庫(kù) clone 下來(lái)
git clone --bare<遠(yuǎn)端倉(cāng)庫(kù)地址># bare 是指不帶工作目錄猎莲,也就相當(dāng)于只 clone .git 目錄
git push<遠(yuǎn)端名><本地分支名>
git push -u<遠(yuǎn)端名><本地分支名># -u 表示將本地分支的內(nèi)容推到遠(yuǎn)端分支绍弟,并且將本地分支和遠(yuǎn)端分支關(guān)聯(lián)起來(lái)
git push -u origin master # 表示把本地 master 分支的內(nèi)容推到遠(yuǎn)端分支 origin/master,并且將本地分支 master 和遠(yuǎn)端分支 origin/master 關(guān)聯(lián)起來(lái)git push # 這條命令也可以使用著洼,默認(rèn)是將當(dāng)前本地所在分支推到相關(guān)聯(lián)的遠(yuǎn)端分支git fetch<遠(yuǎn)端名><本地分支名>
git fetch origin master # 將遠(yuǎn)端分支 origin/master fetch 到本地git pull<遠(yuǎn)端名><本地分支名># 將遠(yuǎn)端分支 fetch 到本地樟遣,并且將遠(yuǎn)端分支和本地所處分支進(jìn)行合并
git pull --rebase # 以 rebase 方式進(jìn)行合并,也就是將本地分支 rebase 到遠(yuǎn)端分支
最后郭脂,小編想說(shuō):我是一名python開(kāi)發(fā)工程師年碘,
整理了一套最新的python系統(tǒng)學(xué)習(xí)教程,
想要這些資料的可以關(guān)注私信小編“01”即可(免費(fèi)分享哦)希望能對(duì)你有所幫助.