鍍金池/ 教程/ Java/ Git 實(shí)用功能
Github 秘籍三
Github 秘籍二
Git 資源
Github 秘籍一
Git 實(shí)用功能
Git 配置

Git 實(shí)用功能

從工作區(qū)去除大量已刪除文件

當(dāng)用 /bin/rm 命令刪除了大量文件之后,你可以用下面一條命令從工作區(qū)和索引中去除這些文件,以免一個(gè)一個(gè)的刪除:

$ git rm $(git ls-files -d)

例如:

$ git status
On branch master
Changes not staged for commit:
    deleted:    a
    deleted:    c

$ git rm $(git ls-files -d)
rm 'a'
rm 'c'

$ git status
On branch master
Changes to be committed:
    deleted:    a
    deleted:    c

上一個(gè)分支

快速檢出上一個(gè)分支:

$ git checkout -
# Switched to branch 'master'

$ git checkout -
# Switched to branch 'next'

$ git checkout -
# Switched to branch 'master'

進(jìn)一步了解 Git 分支

去除空白

Git Stripspace 命令可以:

  • 去掉行尾空白符
  • 多個(gè)空行壓縮成一行
  • 必要時(shí)在文件末尾增加一個(gè)空行

使用此命令時(shí)必須傳入一個(gè)文件,像這樣:

$ git stripspace < README.md

進(jìn)一步了解 Git stripspace 命令

檢出 Pull Requests

對(duì) Github 倉(cāng)庫(kù)來(lái)說(shuō),Pull Request 是種特殊分支, 可以通過(guò)以下多種方式取到本地:

取出某個(gè)特定的 Pull Request 并臨時(shí)作為本地的 FETCH_HEAD 中以便進(jìn)行快速查看更改( diff )以及合并( merge ):

$ git fetch origin refs/pull/[PR-Number]/head

通過(guò) refspec 獲取所有的 Pull Request 為本地分支:

$ git fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*'

或在倉(cāng)庫(kù)的.git/config中加入下列設(shè)置來(lái)自動(dòng)獲取遠(yuǎn)程倉(cāng)庫(kù)中的 Pull Request

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:tiimgreen/github-cheat-sheet.git
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:tiimgreen/github-cheat-sheet.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

對(duì)基于派生庫(kù)的 Pull Request,可以通過(guò)先 checkout 代表此 Pull Request 的遠(yuǎn)端分支再由此分支建立一個(gè)本地分支:

$ git checkout pr/42 pr-42

操作多個(gè)倉(cāng)庫(kù)的時(shí)候,可以在 Git 中設(shè)置獲取 Pull Request 的全局選項(xiàng)。

git config --global --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"

此時(shí)可以在任意倉(cāng)庫(kù)中使用以下命令:

 git fetch origin
git checkout pr/42

進(jìn)一步了解如何本地檢出 pull request

沒(méi)有任何改動(dòng)的提交

可以使用--allow-empty選項(xiàng)強(qiáng)制創(chuàng)建一個(gè)沒(méi)有任何改動(dòng)的提交:

$ git commit -m "Big-ass commit" --allow-empty

這樣做在如下幾種情況下是有意義的:

  • 標(biāo)記新的工作或一個(gè)新功能的開(kāi)始。
  • 記錄對(duì)項(xiàng)目的跟代碼無(wú)關(guān)的改動(dòng)。
  • 跟使用你倉(cāng)庫(kù)的其他人交流。
  • 作為倉(cāng)庫(kù)的第一次提交,因?yàn)榈谝淮翁峤缓蟛荒鼙?code>rebase: git commit -m "init repo" --allow-empty

美化 Git Status

在命令行輸入如下命令:

$ git status

可以看到:

http://wiki.jikexueyuan.com/project/github-secret/images/gh29.png" alt="" />

加上-sb選項(xiàng):

$ git status -sb

這會(huì)得到:

http://wiki.jikexueyuan.com/project/github-secret/images/gh30.png" alt="" />

進(jìn)一步了解 Git status 命令

美化 Git Log

輸入如下命令:

$ git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

可以看到:

http://wiki.jikexueyuan.com/project/github-secret/images/gh31.png" alt="" />

這要?dú)w功于Palesz在 stackoverflow 的回答。

這個(gè)命令可以被用作別名,詳細(xì)做法見(jiàn)這里。

進(jìn)一步了解 Git log 命令

Git 查詢(xún)

Git 查詢(xún)運(yùn)行你在之前的所有提交信息里進(jìn)行搜索,找到其中和搜索條件相匹配的最近的一條。

$ git show :/query

這里 query (區(qū)別大小寫(xiě))是你想要搜索的詞語(yǔ), 這條命令會(huì)找到包含這個(gè)詞語(yǔ)的最后那個(gè)提交并顯示變動(dòng)詳情。

$ git show :/typo

http://wiki.jikexueyuan.com/project/github-secret/images/gh32.png" alt="" />

按 q 鍵退出命令。

合并分支

輸入命令:

$ git branch --merged

這會(huì)顯示所有已經(jīng)合并到你當(dāng)前分支的分支列表。

相反地:

$ git branch --no-merged

會(huì)顯示所有還沒(méi)有合并到你當(dāng)前分支的分支列表。

進(jìn)一步了解 Git branch 命令

修復(fù)有問(wèn)題的提交以及自動(dòng)合并

如果上一個(gè)或多個(gè)提交包含了錯(cuò)誤,可以在你修復(fù)問(wèn)題后使用下列命令處理(假設(shè)要修復(fù)的提交版本是 abcde):

$ git commit --fixup=abcde
$ git rebase abcde^ --autosquash -i

進(jìn)一步了解 Git commit 命令

進(jìn)一步了解 Git rebase 命令

以網(wǎng)站方式查看本地倉(cāng)庫(kù)

使用 Git 的 instaweb 可以立即在 gitweb 中瀏覽你的工作倉(cāng)庫(kù)。這個(gè)命令是個(gè)簡(jiǎn)單的腳本,配置了 gitweb 和用來(lái)瀏覽本地倉(cāng)庫(kù)的 Web 服務(wù)器。(譯者注:默認(rèn)需要 lighttpd 支持)

$ git instaweb

執(zhí)行后打開(kāi):

http://wiki.jikexueyuan.com/project/github-secret/images/gh33.png" alt="" />

進(jìn)一步了解 Git instaweb 命令

上一篇:Github 秘籍二下一篇:Github 秘籍三