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

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


当前回答

另一种方式:

检查您想要返回的分支, 然后将本地工作副本重置到您想要在远程服务器上成为最新一份的承诺( 它将在离别后进行的一切) 。 要做到这一点, 请在 SupportTree I右键点击并选中的“ 重置 BranchNAME 以进行此承诺 ” 。

然后导航到仓库的本地目录并运行此命令 :

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

这将删除您本地仓库中当前一个后的所有承诺, 但只删除该分支 。

其他回答

类型类型类型git log并发现最后的散列代码,然后输入:

git reset <the previous co>

只要在下面执行命令时重置它, 使用git:

git reset --soft HEAD~1

解释:什么什么是git reset基本上reset任何承诺,如果你愿意 回去,如果你把它和--soft键,它将返回,但保留您文件中的更改,所以您可以回到刚刚添加文件的阶段,HEAD是分支的首脑,如果结合了~1(在这种情况下,你们也使用)HEAD^,它会回去 只有一个承诺 你想要什么...

我为您创建了以下图像中的步骤, 详情更多, 包括所有在真实情况下可能发生的步骤, 并承诺执行代码 :

How to undo the last commits in Git?

主要设想有两种情况:

你还没推动承诺呢

如果问题在于您所做的额外文件( 而您不希望存储库中的文件), 您可以使用git rm并且实践,--amend

git rm <pathToFile>

您也可以以下列方式删除整个目录-r,或甚至与其他巴什命令命令

git rm -r <pathToDirectory>
git rm $(find -name '*.class')

删除文件后, 您可以执行-- amend -- 修正 -- 修正选项选项选项

git commit --amend -C HEAD # the -C option is to use the same commit message

这将重写您最近的本地承诺删除额外文件, 因此, 这些文件将不会被按键发送, 并且 GC 将会从您本地的. git 仓库中删除 。

您已经推进了任务

您可以对其它情景应用相同的解决方案,然后做git push和和-f选项选项,但它是未建议因为它以不同的变化(它会破坏你的仓库) 推翻了遥远的历史。

相反,你必须做承诺--amend(记住关于 - amend : 该选项重写上次承诺的历史) 。

我想撤销我们共享存储库中最新的五个承诺。 我查了我想回溯到的订正代号 。 然后我输入了下面的内容 。

prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To git@bitbucket.org:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>

git 重置 -- 混集、 -- soft 和 -- hard 的区别

先决条件:当修改您存储库中的现有文件时,该修改最初被视为未阶段。为了实施修改,需要分阶段进行,这意味着使用索引git add。在一次任务操作中,被筛选的文件会被添加到索引中。

让我们举一个例子:

- A - B - C (master)

HEAD点点到C与索引匹配C.

-- 软

  • 当我们执行时git reset --soft B有意并打算删除承诺 C将主控/ HEAD 指向 B.
  • 主人/总部现在将指向B,但指向B指数与C指数仍有变化.
  • 执行时执行时git status您可以看到索引中的文件承诺 C计为阶段d.
  • 执行git commit到此点将创建新承诺与C相同的变化

-- 混合混合

  • 执行执行git reset --mixed B.
  • 执行时,主/主/总部领导将指B和B也修改索引以匹配 B原因是使用了混合国旗。
  • 如果我们在这一点上运行git承诺, 没有什么会发生,因为与 HEAD 的索引匹配.
  • 工作目录里还有变化 但是既然不在索引里git 状态显示为未阶段状态.
  • 承诺他们,你会git add然后如往常地实践。

--- 硬

  • 执行执行git reset --hard B
  • 执行时,主/总部主/总部将指B修改工作目录
  • 缩略C 中添加的更改全部未承诺的更改已删除.
  • 工作副本中的文件将与承诺 B 匹配, 这将导致永久删除在承诺 C 和 未承诺的更改中所做的所有更改

希望这种对可供使用的旗帜的比较git reset命令会帮助某人明智地使用它们。请参考这些以获取更多细节链接1 & 链接2