我的朋友正在做项目的一部分,而我正在做另一部分。
我的朋友刚刚提交了一些未经代码审查的代码。我需要撤消这个。但是,我也不希望他失去任何工作。
基本上,我想回到大约 20 分钟的时间 - 我希望他在他的机器上进行所有更改,但我希望我们的主分支没有这些更改。
这样做的最佳方法是什么?我担心执行 git reset --hard - 我认为这是永久性的,而且我担心这样做会在我朋友执行 git pull 时删除他计算机上的文件。
我的朋友正在做项目的一部分,而我正在做另一部分。
我的朋友刚刚提交了一些未经代码审查的代码。我需要撤消这个。但是,我也不希望他失去任何工作。
基本上,我想回到大约 20 分钟的时间 - 我希望他在他的机器上进行所有更改,但我希望我们的主分支没有这些更改。
这样做的最佳方法是什么?我担心执行 git reset --hard - 我认为这是永久性的,而且我担心这样做会在我朋友执行 git pull 时删除他计算机上的文件。
首先,即使你不小心永久删除了一些东西,Git 默认情况下会保留删除项目的记录几周,所以你可能仍然可以恢复。请注意,这仅适用于已在某个时间提交或隐藏的更改。
其次,如果他将更改移动到单独的分支并且不在该分支上远程签出,则在拉取时不会删除文件。或者他只是做一个抓取和樱桃挑选更改。
无论如何,我没有亲自尝试过,但我相信你想要的命令是
git reset --soft HEAD~3
这会将 head 的位置更改为 3 次提交前,同时将较新的文件留在工作树中。
试试这个
git reset HEAD^^^
^
为要撤消的每个提交添加一个。
我要做的是:
git log
复制您要返回的提交的校验和(例如 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7),然后执行结帐。这将使用过去的版本更新您的工作树。
git checkout 085bb3
您现在应该将工作文件复制到不同的目录(您当前不在工作树下)。
然后回到你的主/主分支
git checkout master
现在你回到了你的工作树。
我为此推荐 git revert 。Revert 将创建一个新的提交,以撤销已恢复的提交。这意味着原始提交是完整的,并且还具有仅删除违规提交的好处,而不是此后发生的所有提交。所以,如果你想摆脱的提交是 xxxxx,你可以这样做:
git revert xxxxx
默认情况下,提交消息会告诉其他人这是一个还原,并且它会显示原始提交 id,以便每个人都可以轻松找到还原的提交。
这就是我要做的。
git branch not_code_reviewed_yet
. 这将使用您朋友的更改创建一个分支,以便您稍后可以返回它们。
git reset --hard <commit you want master to go back to>
. 这应该让 master 在您的朋友更改之前重新提交。版本图现在应该看起来像
A
\-B-C-D
A为主,D为not_code_reviewed_yet