Git命令小記
由于自己平常git用的不多不熟練,最近寫個(gè)小東西并把代碼托管到github,才發(fā)現(xiàn)之前看的《Pro Git》和《看日記學(xué)git》完全打水漂。重翻《Pro Git》,把一些重要的常見的命令記下來(lái),備忘,具體的請(qǐng)man。
符號(hào)約定:
[]:可選 <>:必選
Git 配置
git config [--global] user.name <name> 設(shè)置用戶名
git config [--global] user.email <email> 設(shè)置郵箱
git config [--global] core.editor <editor> 設(shè)置編輯器
git config [--global] github.user <user> 設(shè)置github賬號(hào)名
git config [--global] github.token <token> 設(shè)置github的token
--global是對(duì)當(dāng)前系統(tǒng)用戶的全局設(shè)置,在~/.gitconfig中。對(duì)系統(tǒng)所有用戶進(jìn)行配置,/etc/gitconfig。對(duì)當(dāng)前項(xiàng)目,.git/config
Git 創(chuàng)建庫(kù)
git clone <url> ssh/http(s)/git三種協(xié)議,ssh和https可推送
git init 初始化Git倉(cāng)庫(kù)
Git 日常操作
git add <file> 將文件加入index file
git rm [--cached] 刪除,加--cached表示僅從index file中刪除文件,即放棄跟蹤
git mv <src> <dest> 移動(dòng)/更名
git diff --cached/--staged 當(dāng)前索引與上次提交(有哪些需要commit)
git diff 當(dāng)前索引與工作目錄(有哪些需要add)
git diff HEAD[^] 工作目錄與上次提交(當(dāng)前目錄與上次提交有何改變)
git commit [-a] -m <msg> 提交
git commit --amend [-m <msg>] 修復(fù)上次提交
git reset HEAD <file> 同--mixed,default option
git reset --mixed HEAD 撤銷 commit 和index file,只保留 working tree 的信息
git reset --hard HEAD[^] 將 working tree 和 index file 都撤銷到以前狀態(tài)
git reset --soft HEAD[^] 只撤銷 commit,而保留 working tree 和 index file 的信息
回復(fù)到某個(gè)狀態(tài)。以git reset --soft HEAD為例,commit回退到
HEAD(相當(dāng)于無(wú)變化),若是HEAD^,則commit回退到HEAD^
git gc 用垃圾回收機(jī)制清除由于 reset 而造成的垃圾代碼
git status 顯示當(dāng)前工作目錄狀態(tài)
git log [-p] 顯示提交歷史(many useful options to be learned)
git branch [branch] 顯示/新建分支
git branch -d/-D 刪除分支(d表示“在分支合并后刪除分支”,D表示無(wú)論如何都刪除分支)
git show-branch
git checkout <branch> 切換分支(分支未commit無(wú)法切換)
git merge <branch> 合并分支
git merge == git pull .
git show <branch | commit | tag | etc> 顯示對(duì)應(yīng)對(duì)象的信息
git grep <rep> [object] (在指定對(duì)象(歷史記錄)中)搜索
git cat-file 查看數(shù)據(jù)
git cat-file <-t | -s | -e | -p | (type)> <object> type can be one of: blob, tree, commit, tag
git ls-files [--stage] show information about files in the index and the working tree(實(shí)際是查看索引文件)
git watchchanged <since>..<until> 顯示兩個(gè)commit(當(dāng)然也可以是branch)的區(qū)別
git remote [-v] 顯示遠(yuǎn)程倉(cāng)庫(kù),加-v選項(xiàng)可顯示倉(cāng)庫(kù)地址
git remote add <repo_name> <url> 添加遠(yuǎn)程倉(cāng)庫(kù),repo_name為shortname,指代倉(cāng)庫(kù)地址
git remote rename <old_name> <new_name> 更名
git remote rm <repo_name> 刪除遠(yuǎn)程倉(cāng)庫(kù)
git remote show <repo_name> 查看遠(yuǎn)程倉(cāng)庫(kù)信息
git remote fetch <repo_name> 從遠(yuǎn)程倉(cāng)庫(kù)抓取數(shù)據(jù)(并不合并)
git pull <repo_name> <branch_name> 拉去數(shù)據(jù)并合并到當(dāng)前分支
git push <repo_name> <branch_name> 推送指定分支到指定倉(cāng)庫(kù)
git fetch <repo_name> <branch_name>[:<local_branch_name>] 拉去數(shù)據(jù),未合并
Git 標(biāo)簽
git 標(biāo)簽相關(guān)……
Git 相關(guān)環(huán)境變量
GIT_DIR: 如果指定了那么git init將會(huì)在GIT_DIR指定的目錄下創(chuàng)建版本庫(kù)
GIT_OBJECT_DIRECTORY: 用來(lái)指示對(duì)象存儲(chǔ)目錄的路徑。即原來(lái)$GIT_DIR/objects下的文件會(huì)置于該變量指定的路徑下
Git 常見變量
HEAD: 表示最近一次的 commit。
MERGE_HEAD: 如果是 merge 產(chǎn)生的 commit,那么它表示除 HEAD 之外的另一個(gè)父母分支。
FETCH_HEAD: 使用 git-fetch 獲得的 object 和 ref 的信息都存儲(chǔ)在這里,這些信息是為日后 git-merge 準(zhǔn)備的。
HEAD^: 表示 HEAD 父母的信息
HEAD^^: 表示 HEAD 父母的父母的信息
HEAD~4: 表示 HEAD 上溯四代的信息
HEAD^1: 表示 HEAD 的第一個(gè)父母的信息
HEAD^2: 表示 HEAD 的第二個(gè)父母的信息
COMMIT_EDITMSG: 最后一次 commit 時(shí)的提交信息。
TO BE FINISHED!