我如何将修改的文件转换为以前的修订,在一个特定的 commit hash (我通过 git log 和 git diff 确定)?
当前回答
git-aliases, awk 和 shell 功能到救援!
git prevision <N> <filename>
在 <N> 是对 <filename> 文件进行回复的文件修订的数量. 例如,要检查单个文件 x/y/z.c 的即时以前修订,请运行
git prevision -1 x/y/z.c
GIT预测是如何工作的?
将以下内容添加到您的 gitconfig
[alias]
prevision = "!f() { git checkout `git log --oneline $2 | awk -v commit="$1" 'FNR == -commit+1 {print $1}'` $2;} ;f"
命令基本上在指定的文件上执行一个 git 登录,并在文件历史中查定适当的 commit-id,并执行指定的文件的 commit-id 的 git 支票。
基本上,每个人都会在这种情况下手动做的一切,包装在一个美丽而高效的吉特阿利亚 - 吉特预测
其他回答
但是,请注意, git checkout./foo 和 git checkout HEAD./foo 并不完全相同; 案例在点:
$ echo A > foo
$ git add foo
$ git commit -m 'A' foo
Created commit a1f085f: A
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 foo
$ echo B >> foo
$ git add foo
$ echo C >> foo
$ cat foo
A
B
C
$ git checkout ./foo
$ cat foo
A
B
$ git checkout HEAD ./foo
$ cat foo
A
(第二个添加步骤是指数中的文件,但它不会被承诺。
Git checkout./foo 是指从指数中转向./foo 路径; 添加 HEAD 指示 Git 将指数中的路径转向其 HEAD 修订之前。
git revert <hash>
它听起来像你认为 git revert 只会影响最新的承诺。
它不会解决你的问题,如果你想转换一个更改在一个特定的文件,并承诺更改超过该文件。
下面是Rebase如何工作:
git checkout <我的分支> git rebase 主 git checkout 主 git merge <我的分支>
假设你有
───────────────────
... 查看你想向大师分支申请的变革分支。 退缩命令从 <我的分支>(不在大师中找到)采取命令,并将其重新应用到大师的头部。 换句话说,在 <我的分支>中的第一个命令的父母不再是大师历史中的先前命令,而是当前大师的头部。
git rebase master <my branch>
这可能更容易记住这个命令,因为“基础”和“修改”分支都明确。
历史的最终结果是:
────────────────────
git checkout master
git merge <my branch>
...做一个快速前进的合并,将所有 <我的分支> 变更应用于主人. 没有这个步骤,退缩承诺不会添加到主人. 最终结果是:
───────────────────
git branch -d <my branch>
这是一个非常简单的步骤. 检查文件到我们想要的承诺ID,这里一个承诺ID之前,然后只是 git承诺修改,我们已经完成了。
# git checkout <previous commit_id> <file_name>
# git commit --amend
如果我们想把任何文件带到承诺的顶部的任何先前承诺 ID,我们可以轻松地做到。
如果你知道你需要回去多少承诺,你可以使用:
git checkout master~5 image.png
这假设你在主分支,你想要的版本是5个承诺回来。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别