我无意间把错误的档案 写错给Git 基特,但还没有将承诺推进到服务器上。
我如何解除那些承诺?当地当地仓库?
我无意间把错误的档案 写错给Git 基特,但还没有将承诺推进到服务器上。
我如何解除那些承诺?当地当地仓库?
当前回答
其他回答
这将添加一个新的承诺, 删除所添加的文件 。
git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"
或者您可以重写历史来撤销最后一项承诺 。
警告警告警告警告:此命令将永久删除对《京都议定书》的修改.java
您承诺的文件( 和任何其他文件) -- 从工作目录中删除全部修改 :
git reset --hard HEAD~1
缩略hard reset
至HEAD-1
您的工作副本将在您错误犯罪之前设定为犯罪状态 。
在回答之前,我们补充一些背景背景,解释一下HEAD
是。 这是。
First of all what is HEAD?
HEAD
仅指当前分支的当前承诺(最新承诺)。
只有一个,只有一个,只有一个HEAD
在任何给定时间(不包括git worktree
).
内容的内容HEAD
存储在内部.git/HEAD
并包含当前承诺的 40 字节 SHA-1 。
detached HEAD
如果你们不履行最近的承诺,那末,HEAD
指向历史中的先前承诺 它被称作detached HEAD
.
在命令行上,它会看起来像这个 - SHA-1 而不是从HEAD
不指向当前分支的端点 :
git checkout
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits to go back
这将检查指向想要的承诺的新分支 。
此命令将检出给给定的承诺 。
此时此刻,您可以创建一个分支,并从此开始工作。
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# Create a new branch forked to the given commit
git checkout -b <branch name>
git reflog
你可以随时使用reflog
并且,还有。
git reflog
将显示更新HEAD
并检查想要的 reflog 条目将设置HEAD
返回到此任务。
总部总部每次修改时,将有一个新的条目。reflog
git reflog
git checkout HEAD@{...}
这样你就可以回到你想要的事业了
git reset --hard <commit_id>
"移动"你的总部 回到想要的承诺。
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
git rebase --no-autostash
并且,还有。git revert <sha-1>
“ 撤消” 指定的承诺或承诺范围 。
重置命令将“ 撤消” 对给定任务所做的任何更改 。
将使用解析补丁进行新承诺, 而原始承诺也将保留在历史中 。
# Add a new commit with the undo of the original one.
# The <sha-1> can be any commit(s) or commit range
git revert <sha-1>
这个计划说明哪个指挥所做什么。
如你所见reset && checkout
修改HEAD
.
认为我们有code.txt 代码转换器。我们对其文件进行一些修改并做出承诺。我们可以以三种方式撤销这一承诺,但首先你应该知道什么是阶段文件...git status
此文件将以绿色颜色显示, 如果此文件没有被预设用于承诺, 则会以红色显示 :
意思是,如果您进行更改,此文件中的更改就不会保存。 您可以在您的舞台上添加此文件git add code.txt
然后承诺更改:
撤消上次承诺 :
另一种方式:
检查您想要返回的分支, 然后将本地工作副本重置到您想要在远程服务器上成为最新一份的承诺( 它将在离别后进行的一切) 。 要做到这一点, 请在 SupportTree I右键点击并选中的“ 重置 BranchNAME 以进行此承诺 ” 。
然后导航到仓库的本地目录并运行此命令 :
git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME
这将删除您本地仓库中当前一个后的所有承诺, 但只删除该分支 。
$ git commit -m "Something terribly misguided" # (0: Your Accident)
$ git reset HEAD~ # (1)
[ edit files as necessary ] # (2)
$ git add . # (3)
$ git commit -c ORIG_HEAD # (4)
git reset
是负责取消对。它会解除您最后的承诺,而您的工作树( 您在磁盘上的文件状态) 尚未被移动 。在你再次犯下罪行之前,你需要再加一次)。git add
任何您想要包含在您新承诺中的内容 。reset
复制旧头头到.git/ORIG_HEAD
; commit
与-c ORIG_HEAD
将打开编辑器,该编辑器最初包含旧承诺的日志消息,并允许您编辑它。如果不需要编辑该消息,您可以使用该-C
选项。或者编辑上一个承诺( 或仅其承诺信件), commit --amend
将在当前索引内对上一个承诺添加变化。
要删除( 不再返回) 被推到服务器的承付重写历史git push origin main --force[-with-lease]
这是必要的。这是几乎几乎总是使用一个坏主意--force
; 偏; 更优--force-with-lease
改为,如以下所示:Git 手册:
如果你[重写历史]已经发表,你应该了解重写历史的意义。
您可以使用git reflog
确定 SHA-1用于您想要返回的承诺。 一旦您拥有此值, 请使用上文解释的顺序命令 。
HEAD~
与HEAD~1
该条什么是头在Git?如果您想要解开多项承诺, 将会很有帮助 。