我无意间把错误的档案 写错给Git 基特,但还没有将承诺推进到服务器上。

我如何解除那些承诺?当地当地仓库?


当前回答

如果你们在本地做出你们不喜欢的事,而他们还没有被推倒,而你们却可以把事情重现为以往的善事。这好像坏事从未发生过。下面是这样的:

在您的终端中( 终端、 Git Bash 或 Windows 命令提示) , 浏览到您的 Git repo 的文件夹中。 运行 git 状态, 并确保您有干净的工作树。 每个承诺都有一个独特的散列( 看起来像 2f5451f ) 。 您需要找到最后一件好事的散列( 您想要返回到哪个地方 ) 。 这里有两个地方您可以看到要承诺的散列 : 在 GitHub 或 Bitbucket 网站或网站的承诺历史中 。 在您的终端中( 终端、 Git Bash 或 Windows 命令快递) 运行命令 git 日志 -- 在线, 一旦您知道最后一件好事的仓列( 您想要返回到哪个地方) , 请运行以下的命令( 将 2f5451f 与您的承诺重写 ) :

git reset 2f5451f
git reset --hard 2f5451f

注:如果您确实重置了承诺, 承诺将被删除, 但更改将显示为未承诺, 允许您访问代码 。 这是最安全的选项, 因为也许您想要一些代码, 现在您可以做出一些好的更改和新承诺 。 通常您会想要撤销承诺, 丢弃代码, 这正是 Git 重置 -- 硬键所做的 。

其他回答

在我的案子中,我无意中犯了一些我不想犯的案卷。所以我做了以下的,它奏效了:

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

用 gitk 或 git 日志 -- stat 校验结果

我验证了所提议的有效方法,这里就是使用这一方法的一个具体例子:

如果您想要永久撤销/取消您的最后一项承诺(等等, 一个一个一个, 尽可能多) , 有三个步骤 :

1: 获取您想要到达的承诺的 id = SHA, 当然

$ git log

2: 删除您先前的承诺

$ git reset --hard 'your SHA'

3: 将新的本地历史强制在您的原籍 GitHub 与-f选项( 将从 GitHub 历史中删除最后的磁轨)

$ git push origin master -f

示例示例示例示例

$ git log

最后一次承诺取消

commit e305d21bdcdc51d623faec631ced72645cca9131 (HEAD -> master, origin/master, origin/HEAD)
Author: Christophe <blabla@bla.com>
Date:   Thu Jul 30 03:42:26 2020 +0200

U2_30 S45; updating files package.json & yarn.lock for GitHub Web Page from docs/CV_Portfolio...

现在就向总部提交我们想要的文件

commit 36212a48b0123456789e01a6c174103be9a11e61
Author: Christophe <blabla@bla.com>
Date:   Thu Jul 30 02:38:01 2020 +0200

First commit, new title

删除最后一项, 达到承诺前, 删除最后一项

$ git reset --hard 36212a4

HEAD is now at 36212a4 First commit, new title

检查一下,没事的

$ git log

commit 36212a48b0123456789e01a6c174103be9a11e61 (HEAD -> master)
Author: Christophe <blabla@bla.com>
Date:   Thu Jul 30 02:38:01 2020 +0200

    First commit, new title

$ git status

On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
 (use "git pull" to update your local branch)

nothing to commit, working tree clean

更新 Git (Hub) 上的历史

$ git push origin master -f

Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/ GitUser bla bla/React-Apps.git
 + e305d21...36212a4 master -> master (forced update)

检查一下,没事的

$ git status

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

撤销一系列本地承诺

OP: 我如何撤销当地最近在Git的最新承诺? 我无意中犯下了错误的案卷[作为几项承诺的一部分]。

开始案例

依你追求的结果而定,有几种方式可以“不做”作为承诺系列。考虑到下面的起始案例,reset, rebasefilter-branch全部可以用于重写您的历史 。

Star-case

如何可以C1 C1C2 C2 级将取消以删除tmp.log是否从每个文件中做出 ?

在下文的例子中,使用了绝对承诺参考,但如果更多地使用相对参考(即:HEAD~2HEAD@{n}).

备选案文1:reset

$ git reset --soft t56pi

using-reset

reset,一个分支可以重置到先前的状态,而任何复合变化都返回到等待区,从中可以放弃任何不必要的变化。

注:原为:reset将所有先前的修改分组到等待区,个人承诺元数据将丢失。如果这与您有问题,你也许更有机会与rebasefilter-branch取而代之。

备选案文2:rebase

$ git rebase --interactive t56pi

using-rebase

使用交互式rebase可以在分支中修改和丢弃不想要的更改。在以上信息图中,右侧的源树可以显示状态位置。rebase.

逐步执行

  1. 选择从哪处进行重置基底(例如 :t56pi)
  2. 选择您要通过替换更改pickedit保存和关闭。
  3. Git 现在将停止对每个选中承诺的每次执行, 允许您重置HEAD,删除不需要的文件,创建全新的承诺。

注:rebase大部分承诺元数据的保存与承诺元数据的保存形成对比。reset上方的替代选项。 如果您想要保留大部分历史, 但只删除不需要的文件, 这很可能是一个首选选项 。

备选案文3:filter-branch

$ git filter-branch --tree-filter 'rm -r ./tmp.log' t56pi..HEAD

上上命令会过滤文件./tmp.log所有承诺在理想范围内的t56pi..HEAD(假设我们最初的起步案例来自以上)请见下文说明清楚。

using-filter-branch

类似rebase, filter-branch可用于从分支的一个小节中清除不想要的文件。 而不是通过重设程序手动编辑每项承诺,filter-branch能够自动预设对每项承诺的预期行动。

注:就像rebase, filter-branch仅丢弃所需文件, 将保存承诺元数据的其余部分 。C1 C1C2 C2 级已经改写了, 日志文件被丢弃了, 从每个任务中 。

结论 结论 结论 结论 结论

就像任何与软件开发有关的事情一样,对于一个特定的问题,有多种方法可以实现相同(或类似)的结果。你只需要选择最适合你特定案例的方法。

最后 -- -- 友好建议

请注意上面所有三种选择都完全重写历史。 除非您确切知道自己在做什么, 并在团队中保持良好的沟通 — — 只有重写承诺还没有远程发布 !

资料来源:以上所有例子都是从中借用的博客博客.

您可以使用git revert <commit-id>.

为了得到身份证明 只需使用git log.

头:

在重置承诺之前, 我们应该知道关于 HEAD... HEAD 在您的工作目录中只是您目前的状况。 它由承诺编号代表 。

Git 承诺 :

在由独有标签代表的一承诺下指定的每一项更改。 无法删除提交 。 所以, 如果您想要您最后的承诺, 您可以简单地跳入其中 。git reset.

您可以使用两种方法跳入最后一个承诺 :

方法1:(如果你不知道承诺编号,但想移动到第一个)

git reset HEAD~1  # It will move your head to last commit

方法2:(如果你们知道自己所做的一切,那末,你们只须将自己所知道的(事情)重新置身于你们所认识的(事情)中)

git reset 0xab3# 提交编号

注:想要了解最近一项任务尝试git log -p -1

以下是图形表达式 :

Enter image description here