我不小心犯了错误的分支。如何删除该提交?
我不小心犯了错误的分支。如何删除该提交?
Answers:
删除最近的提交,并保留已完成的工作:
git reset --soft HEAD~1
删除最近的提交,破坏您已完成的工作:
git reset --hard HEAD~1
git reset --hard origin
git remote
列出产地为我,git reset --hard origin
说fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.
。为什么?
git reset HEAD~1
还将保留所有更改,但将为您留空索引,而不是保留所有内容(如--soft
选项那样)。
我不知道为什么我找到的最佳答案只是在评论中!(由丹妮丝以86票赞成)
git reset --hard origin
此命令将使本地存储库与远程存储库同步,从而消除您对本地存储库所做的所有更改。您也可以执行以下操作以获取原始位置中的确切分支。
git reset --hard origin/<branch>
git reset --hard origin/<branch>
git reset --soft origin/<branch>
,如果您想摆脱提交但保留本地工作。
fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.
,您需要指定分支,例如:git reset --hard origin/feature/my-cool-stuff
不要删除它:仅一次提交git cherry-pick
就足够了。
但是,如果您在错误的分支上进行了几次提交,那么就会git rebase --onto
发光:
假设您有:
x--x--x--x <-- master
\
-y--y--m--m <- y branch, with commits which should have been on master
,然后可以master
将其标记并移动到想要的位置:
git checkout master
git branch tmp
git checkout y
git branch -f master
x--x--x--x <-- tmp
\
-y--y--m--m <- y branch, master branch
,将y分支重置在应有的位置:
git checkout y
git reset --hard HEAD~2 # ~1 in your case,
# or ~n, n = number of commits to cancel
x--x--x--x <-- tmp
\
-y--y--m--m <- master branch
^
|
-- y branch
,最后移动您的提交(重新应用它们,进行新的提交)
git rebase --onto tmp y master
git branch -D tmp
x--x--x--x--m'--m' <-- master
\
-y--y <- y branch
如果要将该提交移至另一个分支,请获取有问题的提交的SHA
git rev-parse HEAD
然后切换当前分支
git checkout other-branch
并cherry-pick
致力于other-branch
git cherry-pick <sha-of-the-commit>
git reset --hard HEAD~1
后续操作。我认为使用reset --soft
然后切换分支并再次提交将节省额外的工作。再一次,我使用SourceTree来完成我的大部分基本工作,仅在出错后使用命令行对此进行命令行。
供您参考,我相信您不仅可以使用git reset --hard,还可以使用以下命令从当前分支“硬切”提交:
git checkout -B <branch-name> <SHA>
实际上,如果您不关心签出,则可以使用以下方法将分支设置为所需的任意值:
git branch -f <branch-name> <SHA>
例如,这是从分支删除提交的编程方式,以便将新提交复制到分支(使用rebase)。
假设您有一个与主服务器断开连接的分支,因为您已从其他位置获取了源并将其转储到该分支中。
现在,您在其中应用了更改的分支中,我们将其称为“主题”。
现在,您将创建主题分支的副本,然后将其重新基于位于分支“ dump”中的源代码转储:
git branch topic_duplicate topic
git rebase --onto dump master topic_duplicate
现在,您的更改将基于“转储”的起点重新应用到分支topic_duplicate中,但仅应用自“ master”以来发生的提交。因此,自从母版以来所做的更改现在重新应用在“转储”的顶部,但结果以“ topic_duplicate”结尾。
然后,您可以通过执行以下操作将“ dump”替换为“ topic_duplicate”:
git branch -f dump topic_duplicate
git branch -D topic_duplicate
或搭配
git branch -M topic_duplicate dump
或者只是丢弃转储
git branch -D dump
清除当前的“ topic_duplicate”之后,也许您也可以选择。
我要说的是,如果要基于其他祖先更新当前的“重复”分支,则必须先通过执行a git reset --hard <last-commit-to-retain>
或git branch -f topic_duplicate <last-commit-to-retain>
然后删除其他提交(从主复制)删除以前的“ cherrypicked”提交。主题转移)。
变基仅在已经具有提交的分支上起作用,因此,每次需要这样做时,都需要复制主题分支。
采摘更容易:
git cherry-pick master..topic
因此,整个序列将归结为:
git reset --hard <latest-commit-to-keep>
git cherry-pick master..topic
当您的主题重复分支已签出时。这将从当前重复项中删除先前选择的提交,而只是将当前“转储”(不同祖先)顶部“主题”中发生的所有更改重新应用。在使用不同的“下游”母版检查您的本地更改是否仍然还适用于此时,将开发基于“真实”上游母版似乎是一种相当方便的方法。或者,您可以只生成一个差异,然后将其应用到任何Git源代码树之外。但是通过这种方式,您可以保留基于发行版本的最新修改(修补)版本,而实际开发却与真正的上游主数据库相对。
因此,仅演示一下:
希望这对某人有帮助。我本来打算重写它,但现在无法管理。问候。
遵循以下命令为我工作,所有本地提交的更改都将被删除,本地重置为与远程源/主分支相同。
git reset-硬起源