所以很久以前我在我的项目中添加了一个带有一组文件的文件夹abc,并使用修订版xyz进行了提交.经过多次提交,有人用git rm -r abc删除了该文件夹.在此之后,还有很多提交.
现在我需要取回文件夹abc.我做
git revert xyz
Run Code Online (Sandbox Code Playgroud)
在此之后,我可以找到文件夹xyz,但不存在提交xyz中添加的所有文件.
我究竟做错了什么?我不想重置,因为我想保持提交xyz和现在之间的历史.
我对本地 git fork 进行了很多更改,我这样做:
git add -Agit commit -m "commit message"git push到我的起源现在碰巧在我之前的提交和新的提交之间还有其他几个提交(来自其他人)。
我希望看到我在新提交中所做的所有更改并对其进行处理。所以,我愿意
git reset --soft <my previous commit>
Run Code Online (Sandbox Code Playgroud)
它显示了我和其他人修改的文件。
问题:
git diff。我知道您可以还原单个提交并右键单击提交并单击还原。但是有没有办法恢复多个提交(比如单个分支上的最新五个提交)?
我正在尝试将我们的远程仓库恢复到之前的提交。树如下图所示:
这个想法是我们想要回到那个提交,而不需要任何从 master 分支拉出来的人必须处理重置回 commit 会出现的问题2dda031。所以我git revert改用了。
我正在尝试通过使用来做到这一点 git revert --no-commit 2dda031..HEAD
但是,我收到此错误:
error: commit d064f7c3b04a2bda30c43a32afac822c6af633c0 is a merge but no -m option was given.
fatal: revert failed
Run Code Online (Sandbox Code Playgroud)
这是预期d064f7c的合并(也是47d4161)。所以按照这里的建议,我这样做:
git revert --abort
git revert --no-commit -m 1 2dda031..HEAD
Run Code Online (Sandbox Code Playgroud)
然后我收到错误消息:
error: mainline was specified but commit cb420e0 is not a merge.
fatal: revert failed
Run Code Online (Sandbox Code Playgroud)
所以我只是觉得我在循环。有人可以告诉我恢复到该提交的正确方法(同时恢复历史记录)吗?
我正在尝试将我的存储库倒回一些提交。
打开提交日志后,我选择要倒回的提交,然后Reset "master" to this...,然后Hard: Reset working tree and index。
当再次打开日志时,所有后来的提交确实都消失了。
但是当我从 clean 中提取存储库时,它们又回到了那里。
这个任务过去对于 Subversion 来说很简单(不过,并没有完全删除一堆提交,只是恢复到以前的提交,除非您选择上一个提交,即最近的提交之前的提交,否则它不会显示在 Tortoise Git 菜单中)。
知道如何实现我的目标吗?
我目前的分支看起来像:
D
/
H--A--B--C
Run Code Online (Sandbox Code Playgroud)
我试图找出如何生成一个新的git分支,这将使新的git repo看起来像:
D
/
H--A--B--C
\
C
Run Code Online (Sandbox Code Playgroud)
这可能吗?我想过使用重置,但这意味着C的变化也会丢失,所以寻找替代方案.
我不小心添加、提交并将我所有未跟踪的文件推送到远程存储库,在那里它们会令我的合作者烦恼。
从那以后,我还进行了另外两次提交,其中一次是通过 git pull 与远程合并。
我想撤消这一系列操作并将我的目录恢复到以前的状态(包括未跟踪的文件)。
使用我尝试过的所有命令(签出、还原、重置、变基),我的未跟踪文件由于撤消提交而丢失。
我该怎么办?
当我运行时git revert,可能会发生冲突。git 是否依赖于 3 路合并,如问题合并内部(参见下表)中所述,也适用于revert?
恢复的合并基础是什么?在使用 git 和 meld 进行交互式变基的 3 向合并中的三个文件是什么?这很清楚,但很难想象这是一个还原。
A - B - C - D - C^-1
Run Code Online (Sandbox Code Playgroud)
(如果我想C在最后恢复。)
我知道你可以恢复到以前的提交,但听起来历史不会消失。如何恢复到之前的提交并确保之后的提交永远消失?
git ×10
git-revert ×10
3-way-merge ×1
azure ×1
azure-devops ×1
azure-repos ×1
branch ×1
git-commit ×1
git-gui ×1
git-rebase ×1
git-reset ×1
github ×1
gitkraken ×1
merge ×1
repository ×1
revert ×1
tortoisegit ×1
undo ×1
unstage ×1