为了研究前一次提交所引入的效果,我想将其反向应用到我的工作副本中,并对代码进行调整。
我通过创建和应用补丁的工作流程进行了管理,但想知道这是否可以更轻松。
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 revert
或git rebase -i
,因为这些会引入新的提交或更改历史记录:我只希望d9fd2bb
中引入的更改不是适用于我目前的工作副本。
答案 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