我无意间把错误的档案 写错给Git 基特,但还没有将承诺推进到服务器上。
我如何解除那些承诺?当地当地仓库?
我无意间把错误的档案 写错给Git 基特,但还没有将承诺推进到服务器上。
我如何解除那些承诺?当地当地仓库?
当前回答
只需撤销最后一项承诺 :
git reset --soft HEAD~
或撤销上次承诺前的时间 :
git reset --soft HEAD~2
或撤销先前的任何承诺 :
git reset --soft <commitID>
(您可以使用git reflog
)
当您撤销上一个任务时, 记住要用
git clean
更多信息,请查看以下文件:git- reseet 重置
其他回答
为了将一些文件从 Git 承诺中移除, 请使用“ - 软” 选项的“ git 重置” 命令, 并在 HEAD 之前指定此承诺 。
$ git reset --soft HEAD~1
当运行此命令时, 您将会看到最近任务( HEAD) 中的文件, 您将能够执行它们 。
现在您的文件在中转区, 您可以使用“ git reset” 命令再次删除它们( 或取消它们) 。
$ git reset HEAD <file>
注意: 这次, 您正在从 HEAD 中重新设置文件, 因为您只是要将文件从您的中转区域中排除 。
如果您对该文件不再感兴趣,请使用“git rm” 命令从索引(也称为中转区)中删除文件。
$ git rm --cached <file>
修改完成后,您可以使用“修正”选项再次进行修改。
$ git commit --amend
要验证文件是否正确从仓库中移除文件, 您可以运行“ git Is- 文件” 命令, 检查文件是否在文件中出现( 如果是新的文件) 。
$ git ls-files
<file1>
<file2>
自 Git 2. 23 以来, 有一种将文件从承诺中移除的新方式, 但是您必须确保您使用的 Git 版本大于或等于 2. 23 。
$ git --version
2.244.1 Git 版本
注: Git 2.23 于2019年8月发布,
要安装更新版本的 Git, 您可以检查此教程 。 要将文件从承诺中删除, 请使用“ git reform” 命令, 使用“ 源代码” 选项指定源代码, 并指定要从仓库中删除的文件 。
例如,为了将名为“ Myfile” 的文件从HEAD 删除, 您将写入以下命令
$ git restore --source=HEAD^ --staged -- <file>
举例来说, 让我们假装您编辑了您最近在您的“ 主管” 分支上的承诺中的文件 。
文件已正确执行, 但您想要从您的 Git 仓库中删除它 。
要从 Git 仓库中删除您的文件, 您需要先恢复它 。
$ git restore --source=HEAD^ --staged -- newfile
$ git status
您的分支比“ 来源/ 主管” 提前 1 个承诺 。 (使用“ 提供推动” 来发布您本地的承诺 )
拟承诺的修改:
(use "git restore --staged <file>..." to unstage)
modified: newfile
未准备进行的更改:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: newfile
如你所见 你的档案又回到了中转区
从那里,您有两个选择, 您可以选择编辑您的文件, 以便重新重新打开它, 或者简单地从您的 Git 仓库中删除它 。
在本节中,我们将描述从您的 Git 仓库中删除文件的步骤。
首先,您需要卸载您的文件, 因为如果它被摆放, 您将无法删除它 。
要卸载文件, 请使用“ git 重置” 命令, 并指定 HEAD 为源代码 。
$ git reset HEAD newfile
当您的文件被正确卸载时, 请使用“ git rm” 命令, 使用“ cached” 选项来从 Git 索引中删除此文件( 这不会删除磁盘上的文件)
$ git rm --cached newfile
r m ' newfile' (新文件)
如果您现在检查了仓库状态, 您将可以看到 Git 正在准备删除承诺 。
$ git status
您的分支比“ 来源/ 主管” 提前 1 个承诺 。 (使用“ 提供推动” 来发布您本地的承诺 )
拟承诺的修改:
(use "git restore --staged <file>..." to unstage)
deleted: newfile
现在您的文件已经准备就绪, 只需使用“ 授权承诺” 和“ 修正” 选项, 以修正您仓库中的最新承诺 。
`$ git commit --amend
[master 90f8bb1] Commit from HEAD
Date: Fri Dec 20 03:29:50 2019 -0500
1 file changed, 2 deletions(-)
delete mode 100644 newfile
`如你所见,这不会产生新的承诺,但将从根本上修改最近的承诺,以便包括您的更改。
某些情况下,你不希望所有文件再次出现:你只有一个文件可以修改一个非常具体的存储库文件。
要从 Git 承诺中删除特定文件, 请使用“ 软” 选项中的“ git 重置” 命令, 指定 HEAD 之前的承诺, 以及您要删除的文件 。
$ git reset HEAD^ -- <file>
修改完成后,您的文件就会回到中转区
首先,您可以选择使用“ Git 重置” 命令从中转区域删除文件,并指定您要从 HEAD 中重置。
$ git reset HEAD <file>
注意: 这并不意味着您会丢失此文件中的更改, 只是文件会被从中转区删除 。
如果您想要从索引中完全删除文件, 您就必须使用“ git rm” 命令, 并使用“ cached” 选项 。
$ git reset HEAD <file>
为了确保您的文件被正确从中转区移除, 请使用“ git Is- files” 命令来列出属于索引的文件 。
$ git ls-files
当您的修改完全完成后, 您可以使用“ git deform” 命令和“ amend” 选项来修改您删除文件的承诺 。
$ git commit --amend
通常我并不想撤销一连串的承诺, 而是编辑早先的承诺,
我发现自己经常去修修过去的东西 以至于我写了剧本
以下是工作流程:
git commit-edit <commit-hash>
这将让您在您想要编辑的承诺上掉下来 。
承诺的更改将是un un准备准备上场 如你所愿 这是第一次
并按你所希望的那样 确定并完成承诺
(您可能想要使用)git stash save --keep-index
来解开任何您没有做的文件)
重做承诺--amend
, 例如 :
git commit --amend
完成重定基数 :
git rebase --continue
以下调作以下调作以下调作以下调作以下调作以下调作以下调作以下调作以下调作以下调作git-commit-edit
把它放在你的$PATH
:
#!/bin/bash
# Do an automatic git rebase --interactive, editing the specified commit
# Revert the index and working tree to the point before the commit was staged
# https://stackoverflow.com/a/52324605/5353461
set -euo pipefail
script_name=${0##*/}
warn () { printf '%s: %s\n' "$script_name" "$*" >&2; }
die () { warn "$@"; exit 1; }
[[ $# -ge 2 ]] && die "Expected single commit to edit. Defaults to HEAD~"
# Default to editing the parent of the most recent commit
# The most recent commit can be edited with `git commit --amend`
commit=$(git rev-parse --short "${1:-HEAD~}")
# Be able to show what commit we're editing to the user
if git config --get alias.print-commit-1 &>/dev/null; then
message=$(git print-commit-1 "$commit")
else
message=$(git log -1 --format='%h %s' "$commit")
fi
if [[ $OSTYPE =~ ^darwin ]]; then
sed_inplace=(sed -Ei "")
else
sed_inplace=(sed -Ei)
fi
export GIT_SEQUENCE_EDITOR="${sed_inplace[*]} "' "s/^pick ('"$commit"' .*)/edit \\1/"'
git rebase --quiet --interactive --autostash --autosquash "$commit"~
git reset --quiet @~ "$(git rev-parse --show-toplevel)" # Reset the cache of the toplevel directory to the previous commit
git commit --quiet --amend --no-edit --allow-empty # Commit an empty commit so that that cache diffs are un-reversed
echo
echo "Editing commit: $message" >&2
echo
你需要做简单快的动作
git commit --amend
是私人分行还是私人分行
git commit -m 'Replace .class files with .java files'
如果它是共享的或公共的分支。
尝试此选项, 硬重置到未添加文件的上一个任务, 然后 :
git reset --hard <commit_hash>
确保您有备份的更改, 以防万一, 因为它是一个困难的重置, 这意味着它们会丢失( 除非您更早隐藏) 。
通常情况下,你想要取消对因为您犯了一个错误,所以您想要修正它 基本上就是OP在问问题时所做的。真的,您真的想要复复做a 承诺。
这里的大多数答案都集中在命令行上。 虽然命令行是使用Git的最佳方法, 当你对它感到舒服的时候, 它可能与来自其他版本控制系统到 Git 的人有点不同。
使用 GUI 如何操作。 如果您安装了 Git, 您已经拥有了所有您需要遵守的指示 。
注:我在这里假设您在推动前意识到承诺是错误的。 如果您不知道推力意味着什么, 那么您可能还没有推动。 继续执行指令 。 如果您推动错误承诺, 最危险的方法就是跟踪错误承诺, 并做出新的承诺, 来修补事情, 您在版本控制系统中这样做的方式不允许您重写历史 。
使用图形用户界面来修正你最近的过错:
git gui