Lak*_*sad 97 git version-control revert
我想仅将特定提交所做的更改还原到给定文件.
我可以使用git revert命令吗?
还有其他简单的方法吗?
mga*_*lgs 173
git show some_commit_sha1 -- some_file.c | git apply -R
Run Code Online (Sandbox Code Playgroud)
类似于VonC的回应,但使用git show
和git apply
.
tee*_*tee 26
假设可以更改提交历史记录,这里是一个工作流,用于在先前的提交中还原单个文件中的更改:
例如,您想要badfile.txt
在提交中还原1个文件()中的更改aaa222
:
aaa333 Good commit
aaa222 Problem commit containing badfile.txt
aaa111 Base commit
Run Code Online (Sandbox Code Playgroud)
重新基础提交,修改问题提交,继续.
1)启动交互式rebase:
git rebase -i aaa111
Run Code Online (Sandbox Code Playgroud)
2)通过更改pick
为e
(用于编辑)在编辑器中标记要编辑的问题提交:
e aaa222
pick aaa333
Run Code Online (Sandbox Code Playgroud)
3)还原对坏文件的更改:
git show -- badfile.txt | git apply -R
Run Code Online (Sandbox Code Playgroud)
4)添加更改并修改提交:
git add badfile.txt
git commit --amend
Run Code Online (Sandbox Code Playgroud)
5)完成rebase:
git rebase --continue
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 19
git revert
适用于提交中的所有文件内容.
对于单个文件,您可以编写脚本:
#!/bin/bash
function output_help {
echo "usage: git-revert-single-file <sha1> <file>"
}
sha1=$1
file=$2
if [[ $sha1 ]]; then
git diff $sha1..$sha1^ -- $file | patch -p1
else
output_help
fi
Run Code Online (Sandbox Code Playgroud)
(来自smtlaissezfaire的git-shell-scripts实用程序)
注意:
如果您尚未提交当前修改,则此处描述了另一种方法.
git checkout -- filename
Run Code Online (Sandbox Code Playgroud)
git checkout
有一些文件选项,从HEAD修改文件,覆盖您的更改.
您可以为git添加别名,这样您就
git revert-file <hash> <file-loc>
可以恢复该特定文件.
看到这个要点.
[alias]
revert-file = !sh /home/some-user/git-file-revert.sh
Run Code Online (Sandbox Code Playgroud)
Dan*_*ing 12
我只需使用该--no-commit
选项git-revert
,然后在最终提交之前删除您不希望从索引中恢复的文件.这是一个示例,说明如何在第二次最近的提交中轻松恢复对foo.c的更改:
$ git revert --no-commit HEAD~1
$ git reset HEAD
$ git add foo.c
$ git commit -m "Reverting recent change to foo.c"
$ git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
第一个git-reset
"unstages"所有文件,以便我们可以添加回我们想要还原的文件.最终git-reset --hard
摆脱了我们不想保留的剩余文件还原.
简单得多:
git reset HEAD^ path/to/file/to/revert
Run Code Online (Sandbox Code Playgroud)
然后
git commit --amend
Run Code Online (Sandbox Code Playgroud)
然后
git push -f
Run Code Online (Sandbox Code Playgroud)
文件不见了,提交哈希,消息等是相同的。
小智 5
git reset HEAD^ path/to/file/to/revert/in/commit
Run Code Online (Sandbox Code Playgroud)
上面的命令将从提交中删除文件,但会在中反映出来git status
。
git checkout path/to/file/to/revert/in/commit
Run Code Online (Sandbox Code Playgroud)
上面的命令将还原更改(结果是您获得与HEAD相同的文件)。
git commit
Run Code Online (Sandbox Code Playgroud)
(通过--amend
以修改提交。)
git push
Run Code Online (Sandbox Code Playgroud)
这样,已提交中的文件将被删除并还原。
应该从进行提交的分支中遵循上述步骤。
小智 5
您可以按照以下步骤操作:
git revert -n <*commit*>
(-n
还原所有更改但不会提交它们)git add <*filename*>
(要还原和提交的文件的名称)git commit -m 'reverted message'
(添加回复消息)如果您想从上次提交中重置对文件的更改,这就是我通常使用的。我认为这是最简单的解决方案。
请注意,该文件将被添加到暂存区。
git checkout <prev_commit_hash> -- <path_to_your_file>
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你 :)
归档时间: |
|
查看次数: |
49630 次 |
最近记录: |