git rebase - 添加原始提交哈希以提交消息

Ale*_*502 8 git rebase

有没有办法cherry-pick -x在rebase中做同样的事情(将原始提交的哈希添加到复制的提交的消息中)?

我现在可以通过更换以下内容来解决它

git checkout other-branch
git rebase master
git checkout master
git merge other-branch
Run Code Online (Sandbox Code Playgroud)

git checkout master
....
git cherry-pick -x other-branch^^^^
git cherry-pick -x other-branch^^^
git cherry-pick -x other-branch^^
git cherry-pick -x other-branch^
git cherry-pick -x other-branch
Run Code Online (Sandbox Code Playgroud)

Ada*_*dam 8

它不漂亮,但它完成了工作;

git rebase --exec='git log --pretty="format:%B" -n 1 > tmp;
    grep -o "\w\{40\}" .git/rebase-merge/done | tail -n 1 >> tmp; 
    git commit --amend -F tmp; 
    rm tmp;' master
Run Code Online (Sandbox Code Playgroud)

解释--exec脚本的每个部分;

  • 将我们刚刚完成的提交信息放入tmp
  • 获取我们刚刚重新定位的提交的哈希.git/rebase-merge/done并将其附加到tmp.
  • 修改我们刚刚使用tmp作为提交消息的提交。
  • 删除tmp文件。

我相信你可以把它改成你会喜欢的格式。

原创作品日志;

commit 1ebdfc2fd26b0eed9f131197dc3274f6d5048e97
Author: Adam
Date:   Thu Jan 24 16:33:09 2019 +0000

    Content C

commit 632f1a4e1ab5d47c9e4c3ca3abd02a207a5dda09
Author: Adam
Date:   Thu Jan 24 16:33:06 2019 +0000

    Content B

commit a7e0d1eb2e412ec51865ccd405ea513c7677c150
Author: Adam
Date:   Thu Jan 24 16:33:04 2019 +0000

    Content A
Run Code Online (Sandbox Code Playgroud)

重新定位的工作日志;

commit 79d7ece06185b21631248a13416e5ca5c23e55b2
Author: Adam
Date:   Thu Jan 24 16:33:09 2019 +0000

    Content C
    1ebdfc2fd26b0eed9f131197dc3274f6d5048e97

commit d2fe6267165fa05f5fe489a6321b0b1742d1a74c
Author: Adam
Date:   Thu Jan 24 16:33:06 2019 +0000

    Content B
    632f1a4e1ab5d47c9e4c3ca3abd02a207a5dda09

commit da72fab2008e74f6a8e247f93619943805ebf86e
Author: Adam
Date:   Thu Jan 24 16:33:04 2019 +0000

    Content A
    a7e0d1eb2e412ec51865ccd405ea513c7677c150
Run Code Online (Sandbox Code Playgroud)


930*_*293 6

所以,这是我的解决方案:

git rebase <branch> \
-ix "git rev-parse --short HEAD > tmp &&  \
echo 'from: $<branch_shortid>' > tmp && \
git commit --amend -F tmp"
Run Code Online (Sandbox Code Playgroud)

请确保branch_shortid是正确的,你想变基含量分支产生.

免责声明:我不确定这是否适用于所有情况,特别是如果你有一些奇怪或复杂的参考系统.我在一个非常简单的git repo上运行了这个:

$ git init 
$ echo "a" > a.txt && git add . && git commit -m "first commit"
$ git checkout -b "feature1" 
$ echo "b" > b.txt && git add . && git commit -m "second commit"
$ echo "c" > c.txt && git add . && git commit -m "third commit"
$ feature1id=$(git rev-parse --short HEAD)
$ git checkout master
$ git rebase feature1 \
  -ix "git rev-parse --short HEAD > tmp &&  \
  echo 'from: $feature1_id' > tmp && \
  git commit --amend -F tmp"
Run Code Online (Sandbox Code Playgroud)

这是相应的输出:

在此输入图像描述


讨论:

如前所述,我认为您使用的git reflog是一个更好的解决方案,用于调查哪个分支合并到所需分支上的提交.

重新定位的关键是将提交应用到另一个分支的顶部,就好像这是首先提交结构:

重新生成产生线性历史.