我可以交互式地从另一个git提交中挑选帅哥吗?

问题描述 投票:24回答:3

我正在寻找与此完全相同的行为

git add -i -p

但是我没有从我的工作目录中编写提交,而是想从提交的(部分)编写我的工作目录。我怎样才能做到这一点 ?

我的用例是我有几个不同的功能在一个提交中组合在一起,我想逐个测试它们

使用cherry-pick -n并不是很令人满意,因为它让我完成了删除所有不需要的代码的肮脏工作。我真的只想选择我想要测试的选定更改。

git
3个回答
30
投票

使用cherry-pick -n并不是很令人满意,因为它让我不得不删除所有不需要的代码。我真的只想选择我想要测试的选定更改。

之前的工作可能是一个肮脏的工作,但随着git checkout --patch的出现,你现在可以选择性地丢弃更改,类似于git add -p添加。


10
投票

你可以使用git reset --mixed HEAD^1来恢复索引,然后用git add -i挑选你想要的帅哥。

reset会将索引回滚到之前的提交(基本上不提交任何HEAD),但它不会触及工作树。你现在可以放置你想要的帅哥,提交它们并用git reset --hard HEAD扔掉其余的东西。


0
投票

基于Cameron Skinner的出色答案,我会稍微扩展一下,以便包含多个提交分支的情况,也许合并提交,也许是很多“噪音”,你想要挑选非常具体的帅哥从中。 (这正是我今天发生的事情)

跟着这些步骤:

git checkout source-branch
git checkout -b cherry-pick-branch # Gives you a new branch based on source-branch
git reset --mixed master

这将为您提供一个分支,其中所有更改都在文件系统中,但没有任何提交/暂存。然后使用git add -p有选择地添加要放置的部分,然后正常提交和推送。

© www.soinside.com 2019 - 2024. All rights reserved.