您可以使用--grep
選項git log
,該選項僅輸出提交符合特定正則表達式的日誌消息。你的情況,你可以這樣做:
git log --oneline --grep='bug #1'
...如果你想看到每個這些提交的推出了補丁,當然,你應該做的:
git log -p --grep='bug #1'
在下面的評論,你解釋說你確實需要一個補丁作爲輸出,這代表這三個提交引入的補丁的累積效果。在這種情況下,您可以嘗試以下方法之一:
- 使用patchutils中的
combinediff
工具組合差異。 (這可能不起作用,具體取決於中間提交發生了什麼變化。)
- 創建一個臨時新分支,並使用交互式分配(可能在
GIT_EDITOR
環境變量中使用巧妙構建的命令)重新排序並壓縮提交。
爲了擴大對後者的選擇了一下,這個腳本是基於("super-kludgy") example通過Jefromi:
#!/bin/sh
set -e
if [ $# -ne 2 ]
then
echo "Usage: $0 REGEX TEMPORARY_BRANCH_NAME"
exit 1
fi
REGEX="$1"
BRANCH_NAME="$2"
git checkout -b "$BRANCH_NAME"
FIRST_COMMIT=$(git log --grep="$REGEX" --pretty=format:%H | tail -1)
if [ -z "$FIRST_COMMIT" ]
then
echo "No commits matched '$REGEX'"
exit 2
fi
export GIT_EDITOR="f() { if [ \"\$(basename \$1)\" = \"git-rebase-todo\" ]; then sed -i -n '/${REGEX}/p' \$1 && sed -i '2,\$s/pick/squash/' \$1; else vim $1; fi }; f"
git rebase -i ${FIRST_COMMIT}^
...你還不如調用:
squash-matching-commits 'bug #1' tmp-branch
...然後將創建分支tmp-branch
,重新綁定到匹配的第一個提交的父項210,只挑選匹配bug #1
並且除第一個之外都擠壓的提交。 (您可能需要解決一些衝突,併爲壓扁提交提供一個提交信息)。如果成功,那麼你可以這樣做:
git show
...看到合併補丁。我不認真地推薦任何人使用這個腳本,但它是一個有趣而且很冒險的做你想做的事情的方式,我認爲:)
對提交進行重新排序是否可以接受?如果他們是你的,而你還沒有推他們,你甚至可以壓扁他們。見http://stackoverflow.com/questions/2740537/reordering-of-commits – Johnsyweb
不,不。他們已經推了。否則我不會有問題。 –
然後,我會'git clone repo temp_repo'並在臨時副本中播放。 – Johnsyweb