Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git中反转特定的提交块?_Git_Git Workflow - Fatal编程技术网

如何在git中反转特定的提交块?

如何在git中反转特定的提交块?,git,git-workflow,Git,Git Workflow,我想知道是否有一种方法可以快速撤销特定的提交 我可以在两次提交之间生成一个diff,或HEAD以查看差异 我该如何反转其中一个大块头(或者更好的是,反转一组特定的大块头) e、 g 其中,$REF是一个REF名称或commit ID,用于指定要从中获取文件状态的提交。例如,要有选择地还原上次提交中所做的更改,请使用HEAD^从上次提交中恢复已删除的文件。我在此处使用了答案: git签出^ 其中,$REF是一个REF名称或commit ID,用于指定要从中获取文件状态的提交。例如,要有选择地还

我想知道是否有一种方法可以快速撤销特定的提交

我可以在两次提交之间生成一个
diff
,或
HEAD
以查看差异

我该如何反转其中一个大块头(或者更好的是,反转一组特定的大块头)

e、 g


其中,
$REF
是一个REF名称或commit ID,用于指定要从中获取文件状态的提交。例如,要有选择地还原上次提交中所做的更改,请使用
HEAD^

从上次提交中恢复已删除的文件。我在此处使用了答案:

git签出^
其中,
$REF
是一个REF名称或commit ID,用于指定要从中获取文件状态的提交。例如,要有选择地还原上次提交中所做的更改,请使用HEAD^


@cdhowie已经回答了这个问题,但我发现使用交互式difftool(如
meld
)有选择地恢复旧的大块/行代码会更好一些,特别是如果代码中有一个新引入的难以发现的bug。

从特定提交中恢复一个或多个大块这样做-本质上使用
add-p

git revert --no-commit <commit>…​ 
git reset                              # unstage things
git add -p [OPTIONS] [<pathspec>…​]     # choose hunks interactively
git restore .                          # wipe the rest (in root directory)
... maybe further changes ...
git commit [--fixup] ...
git revert--无提交…​ 
git重置#取消存储
git add-p[选项][…​]     # 以交互方式选择帅哥
git restore.#擦除其余部分(在根目录中)
…也许会有进一步的改变。。。
git提交[--fixup]。。。
未来的git版本可能直接支持
git revert-p


注意:git checkout/restore-p…等方法不会一致地从特定提交中还原大块,而是从特定文件状态中选择部分-可能会在以后的其他提交中丢失更改。

更准确地说,这将允许您有选择地从以前的提交中签出内容的版本;在当前提交之间的更改t提交,工作树也将被丢弃。是的,我以前也这样做过。但这会还原所有更改?我希望只还原部分更改。@DKinzer:否,
-p
选项将允许您以交互方式选择要应用于工作树的Hunk。没问题。请注意,很多git提交(
添加
签出
重置
等)将以这种方式使用
-p
选项,并让您选择要对哪个大块头采取行动。当同一文件中的两个大块头应该进行不同的提交时,这非常方便。我对git是新手,到目前为止只知道-I在执行重基时有选择地选择提交。我认为-p选项对我非常有用。
git checkout -p HEAD^ myfile
git checkout <deleting_commit>^ -- <file_path>
git difftool $REF -- /path/to/file
git revert --no-commit <commit>…​ 
git reset                              # unstage things
git add -p [OPTIONS] [<pathspec>…​]     # choose hunks interactively
git restore .                          # wipe the rest (in root directory)
... maybe further changes ...
git commit [--fixup] ...