反向将提交应用于工作副本

时间:2013-04-17 12:16:53

标签: git revert

为了研究前一次提交所引入的效果,我想将其反向应用到我的工作副本中,并对代码进行调整。

我通过创建和应用补丁的工作流程进行了管理,但想知道这是否可以更轻松。

git checkout -b "tmp-fiddle"
git diff -R -p d9fd2bb^ d9fd2bb > patch_to_examine.patch
# Manually edit the patch a little
git apply patch_to_examine.patch

请注意,我不会查看git revertgit rebase -i,因为这些会引入新的提交或更改历史记录:我只希望d9fd2bb中引入的更改不是适用于我目前的工作副本。

3 个答案:

答案 0 :(得分:45)

git revert -n怎么样?

-n
--no-commit
     

通常,该命令会自动创建一些提交日志消息的提交,说明哪些提交已被还原。此标志应用将命名提交还原到工作树和索引所需的更改,但不进行提交。此外,使用此选项时,索引不必与HEAD提交匹配。恢复是针对索引的开始状态完成的。

     

当将多个提交效果还原到连续的索引时,这很有用。

答案 1 :(得分:2)

另一种可行的方法是git show | git apply -R-R代表反转差异。

这适用于所有差异,因此您可以git diff ... | git apply -R

或反转隐藏git stash show -p stash@{0} | git apply -R

答案 2 :(得分:0)

如果您是在先前的提交之后。那么最简单的方法是

const data = [{country: "Andorra", geonameid: 3040051, name: "les Escaldes", subcountry: "Escaldes-Engordany"},
{country: "Andorra", geonameid: 3041563, name: "Andorra la Vella", subcountry: "Andorra la Vella"},
{country: "United Arab Emirates", geonameid: 290594, name: "Umm al Qaywayn", subcountry: "Umm al Qaywayn"},
{country: "United Arab Emirates", geonameid: 291074, name: "Ras al-Khaimah", subcountry: "Raʼs al Khaymah"}]

const arr = data.map(i => `${i.name} , ${i.country}`);
console.log(arr)

它的作用是使您的工作树保持不变,但会更改索引以匹配先前的提交。 Git diff和GUI工具将突出显示更改,并允许您通过它们来删除,还原或更改某些功能。随后的git reset HEAD~ -- . / git -a commit --amend将修复当前提交或创建单独的修复提交,而git -a commit将放弃它们。

选择任意更改并将树留在HEAD。

git reset --hard