gpt4 book ai didi

Git 命令仅重置索引和工作树而不是 HEAD

转载 作者:太空狗 更新时间:2023-10-29 14:02:43 26 4
gpt4 key购买 nike

这个问题是对 this question 的跟进.它试图找到一种更简单的方法来在交互式 rebase 期间编辑提交。

这是一个可以看出问题的完整示例:

mkdir git_example
cd git_example
git init
echo first > first
git add first
git commit -m "initial"
git tag initial

echo "How do I see this change while editing in interacive rebase" > second
git add second
git commit -m "second"

echo third > third
git add third
git commit -m "third"

git rebase -i initial
e 66127f1 second
pick 70c0b50 third

git reset HEAD~
git add .
git commit
# NOT commit --amend
# The commit message will be empty, that's ok
git rebase --continue

问题在于 git reset HEAD~ 以及它更改 HEAD 的事实。这会破坏此提交的提交消息,并为我们留下 # The commit message will be empty, that's ok

有没有办法重置索引和工作树但保持 HEAD 不变?

git reset -h 的帮助列出了所有组合而不是那个组合。

最佳答案

使用 git-restore

Is there a way to reset the index and working tree but keep the HEAD intact?

这正是新的git-restore命令用于:

Restore specified paths in the working tree with some contents from a restore source.

默认情况下,git-restore只会修改工作树,但您也可以告诉它更新索引:

The command can also be used to restore the content in the index with --staged, or restore both the working tree and the index with --staged --worktree.

您可能会注意到此行为与 git-reset 直接重叠;两者之间的主要区别在于 git-restore 不会触及 HEAD 引用,这正是您想要的。

命令将是:

git restore --staged --worktree --source HEAD~

请记住,git restore 仍在积极开发中(文档将其列为实验性的),但这绝对是前进的方向。

使用git-showgit-diff

还有一个办法。如果您想在交互式 rebase 期间查看与当前提交关联的补丁,则不必将索引重置为 HEAD~ 即可;相反,您可以简单地使用 git-showgit-diff .

您的工作流程将是:

git rebase -i initial
e 66127f1 second
pick 70c0b50 third
git show
# or
git diff HEAD~..HEAD
# Look at the patch generated by 66127f1
# Modify the files in your working directory as needed
git add .
git commit --amend
git rebase --continue

关于Git 命令仅重置索引和工作树而不是 HEAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57506963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com