Git是一个非凡的工具,但我还没有把我的思想包围在撤消推动变更的最佳方法上.这是情况.
我在一个分支上,已经向GitHub推送了几个提交.从那时起我就决定在兔子洞里走得太远了,我们需要废弃几件已经完成的工作,然后重新开始.从本质上讲,我需要将所有推送的提交撤回到前一个提交.以下是我认为合适的两个命令
git revert # - creates a new commit that "undoes" the changes of one specific commit
git checkout 'commit SHA' # - sets the head to that specific commit, wherein I will re-push to the repo, undoing my changes... I think
Run Code Online (Sandbox Code Playgroud)
所以,我是对的吗?我是否需要对要返回的特定提交进行git checkout?或者这个错综复杂的过程中有什么我不理解的东西?
谢谢.
我的提交树描述如下:
--(+A)--(+B)-+-(-B)--(+E)--(master: AE)
\
+--(+C)--(+D)--(branch: ABCD)
Run Code Online (Sandbox Code Playgroud)
一些更改已在master中恢复。我们需要将分支中的更改合并到主分支,以恢复已恢复的提交。
是否存在一步法?或者只有一种方法是在合并分支之前掌握樱桃选择(B)?
PS Final master必须如下所示:(ABCDE) - 顺序并不重要
我试图恢复到早期的git提交,但得到错误"错误修订".为什么?
这是一个成绩单(删除了作者姓名):
Ellen@ELLEN-PC /c/Users/Susan Mills/git/hello-github (master)
$ git status
# On branch master
nothing to commit, working directory clean
Ellen@ELLEN-PC /c/Users/Susan Mills/git/hello-github (master)
$ git log | head
commit e3eb30cc7ca6d4cd10de755b63821cad75da1e83
Date: Wed Feb 5 17:54:32 2014 -0800
I changed my greeting.
commit 063ac580e28bab524286dac7b0a8f88d9e7d365f
Date: Mon Feb 3 07:53:19 2014 -0800
Ellen@ELLEN-PC /c/Users/Susan Mills/git/hello-github (master)
$ git revert 9e7d365f
fatal: bad revision '9e7d365f'
Run Code Online (Sandbox Code Playgroud)
为什么我会得到"糟糕的修改",我该怎么办?我git bash在Windows 7上使用我的起源于github.
有没有办法识别特定提交的"附带"提交(编辑相同行并将导致冲突的提交)?
一个非常简单的例子
$ git init
$ echo test > test
$ git add test
$ git commit -m "First commit"
$ echo test1 > test
$ git commit -am "Second commit"
$ git l
* 95a29dd Second commit
* 30a68e6 First commit
$ type test
test1
Run Code Online (Sandbox Code Playgroud)
假设在这一点上无论出于何种原因我想要恢复30a68e6.
$ git revert 30a68e6
error: could not revert 30a68e6... First commit
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and …Run Code Online (Sandbox Code Playgroud) 我最近在远程存储库中推送了项目更改的提交。我刚刚发现我通常不提交更改的文件之一被包含在内,因为它可能包含敏感信息。
我想撤消对该文件的提交更改(到最后一个状态),而不丢失其他文件中提交的更改。
由此:
对此:
目前,只有我有权访问该存储库,因此重写历史记录没有问题,因此当我授予对该远程存储库的访问权限时,他们不会在历史记录中看到敏感信息。那么,我该怎么做呢?
我在这里遇到的情况是,另一个合作者完成了 2 次提交,这似乎是错误的文件。我是存储库的所有者,并希望恢复由其他合作者完成的 2 次提交。从我的终端,我尝试了以下操作。
git log -2它只是说我所做的最后 2 次提交。我想知道如何重置最后 2 个提交并将 HEAD 更改为那些 2 个之前的提交。
我有以下承诺
\n\ndd9e52bafac5fa427ed64c5d9cf08015fa804ed4 Added Line 3\na000427a4c70781d0bed7b31f56f290ac1d636b7 Added Line 2\n20baa578ae205768639620749f53bd318e329e73 Added Line 1\n7c043a104394ba4ba5a2fb29d4526de50b7d12be Created file.txt\nRun Code Online (Sandbox Code Playgroud)\n\n在提交 dd9e 时,file.txt 现在读取
\n\nLine 1\nLine 2\nLine 3\nRun Code Online (Sandbox Code Playgroud)\n\nHead 和 master 指向最后一次提交(dd9e)。
\n\ngit revert 20baa\nRun Code Online (Sandbox Code Playgroud)\n\n有人告诉我
\n\nerror: could not revert 20baa57... Added Line 1\nhint: after resolving the …Run Code Online (Sandbox Code Playgroud) 我有一个dev它已经与分支合并的分支featureA和featureB。我将该dev分支合并到master并推到远程。后来我确定由于提交错误featureB而尚未准备好与之合并master。所以我恢复了dev->的合并 master。
git revert -m 1 <merge-commit-hash>
Run Code Online (Sandbox Code Playgroud)
然后我试图合并featureA到master。但是我不能合并。它会说Already up to date。
我知道莱纳斯·托瓦尔兹(Linus Torvalds)所说的原因,
Linus解释了这种情况:
恢复常规提交只会有效地撤消该提交所做的操作,并且非常简单。但是,还原合并提交也会撤消提交更改的数据,但是对合并所产生的历史记录的影响绝对没有任何作用。
因此,合并仍将存在,并且仍将其视为将两个分支结合在一起,并且将来的合并将把合并视为最后一个共享状态-还原引入的合并的还原将完全不影响此状态。
因此,通过“还原”撤销数据的变化,但是这是非常没有在这个意义上,它不会取消的影响对信息库历史提交的“撤销”。
因此,如果您将“还原”视为“撤消”,那么您将总是会错过这部分还原。是的,它撤消数据,但是不,它不会撤消历史记录。
在这种情况下,只有将其dev再次合并的解决方案master是revert the revert commit。但是我只想合并分支中包含的一个dev分支,即featureA
如何将分支(featureA)合并到master包含在还原的合并分支(dev)中的主线分支()?
我在 gitlab 上merge request对我的分支做了一个develop。然后我意识到我犯了一个巨大的错误。我迅速按下revert按钮,我觉得一切都好,其实不是。Gitlab 只revert进行了提交。在日志中仍然有来自源分支的提交。它会导致许多版本问题。是否有任何解决方案可以在 gitlab 平台上恢复单个合并请求并从许多不需要的提交中清除分支日志。我希望我的分支就像这个合并请求从来没有地方一样。
我提交并推送我的代码3次,分别是Submit 1,Submit 2和Submit 3。
我希望将我的代码回滚到Submit 2并将其推送到远程存储库。
因此,我对“提交2”点(请参阅图像“ 执行还原”),“文件与冲突合并”对话框显示(请参见图像文件合并)和“合并”的子对话框进行了还原操作,就像图像“合并的孩子”一样。
答:我不明白为什么执行还原操作时会显示以下代码?看来系统已准备好所有历史记录提交记录以让我合并。
码
<<<<<<< HEAD
//Submit 3
=======
//Submit 1
>>>>>>> parent of 86821fc... Submit 2
Run Code Online (Sandbox Code Playgroud)
B:而且,无论我选择接受,接受还是合并...命令,我都无法得到正确的结果(将代码回滚到Submit 2)。为什么?
C:如果启动“合并...”操作,系统将如何处理?
git ×10
git-revert ×10
git-merge ×3
git-reset ×2
gitlab ×2
git-checkout ×1
git-commit ×1
git-remote ×1
github ×1
revert ×1