我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
当前回答
您可以使用 git 返回 < tomit- id> 。
为了得到身份证明,请使用git日志。
其他回答
在 SourceTree ( GitHub 的 GUI) 上, 您可以右键单击承诺并做一个“ 反向提交 ” 。 这将取消您的更改 。
在终点站上:
可选择使用:
git revert
或者:
git reset --soft HEAD^ # Use --soft if you want to keep your changes.
git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes.
如何编辑上一个承诺
通常我并不想撤销一连串的承诺, 而是编辑早先的承诺,
我发现自己经常去修修过去的东西 以至于我写了剧本
以下是工作流程:
git exent- edit <commit- hash> 这将让您在您想要编辑的承诺时丢弃您。 承诺的更改将会被卸下, 将按您希望的第一次进行, 并准备按您希望的第一次进行。 固定并按您希望的, 并按您希望的原初阶段进行承诺 。 (您可能想要使用 git 隐藏保存 -- kep- index 来抓松任何您没有执行的文件) 重做承诺 -- amend, 例如: git 承诺 -- amend compult the rebase: 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 reset --soft HEAD~
典型基周期
在前几次答复中谈到与Git相关的命令时,我想向所有读者介绍我典型的Git周期,这可能是有益的。 这就是我如何与Git合作,
首次从远程服务器上克隆 $project pulling 从远程( 当我没有未完成的本地推动承诺) git 将新的本地文件 1 添加到 $to_be_compent_list_list (只是想象 $to_be_compent_list means staged 区域) git 添加 $file1 从 $to_be_compent_list_list_list 列表中删除错误添加的文件 2 (假设文件2 添加为步骤 3 ) git 重新设置 $file2 提交文件 1 , 该文件位于 $to_ be_compent_ list git 承诺 - m “ comm 信件描述” 与远程仓库同步本地文件 1 (在冲突发生时配置合并工具 Git 合并时重新解析 # re Solive 合并, 也可以手动合并 添加冲突解析文件, 让我们说: git 添加 $file1 继续我之前的重定义命令 gfile1 -- 继续推进和已经同步的上次本地承诺推进源头: rechangs/ for
使用 git 返回 < commit- id > 。
要拿到身份证明,请使用 git 日志。