0

我的朋友正在做项目的一部分,而我正在做另一部分。

我的朋友刚刚提交了一些未经代码审查的代码。我需要撤消这个。但是,我也不希望他失去任何工作。

基本上,我想回到大约 20 分钟的时间 - 我希望他在他的机器上进行所有更改,但我希望我们的主分支没有这些更改。

这样做的最佳方法是什么?我担心执行 git reset --hard - 我认为这是永久性的,而且我担心这样做会在我朋友执行 git pull 时删除他计算机上的文件。

4

5 回答 5

0

首先,即使你不小心永久删除了一些东西,Git 默认情况下会保留删除项目的记录几周,所以你可能仍然可以恢复。请注意,这仅适用于已在某个时间提交或隐藏的更改。

其次,如果他将更改移动到单独的分支并且不在该分支上远程签出,则在拉取时不会删除文件。或者他只是做一个抓取和樱桃挑选更改。

无论如何,我没有亲自尝试过,但我相信你想要的命令是

git reset --soft HEAD~3

这会将 head 的位置更改为 3 次提交前,同时将较新的文件留在工作树中。

于 2012-07-14T00:32:01.217 回答
0

试试这个

git reset HEAD^^^

^为要撤消的每个提交添加一个。

于 2012-07-14T00:41:09.457 回答
0

我要做的是:

git log

复制您要返回的提交的校验和(例如 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7),然后执行结帐。这将使用过去的版本更新您的工作树。

git checkout 085bb3

您现在应该将工作文件复制到不同的目录(您当前不在工作树下)。

然后回到你的主/主分支

git checkout master

现在你回到了你的工作树。

于 2012-07-14T02:32:32.127 回答
0

我为此推荐 git revert 。Revert 将创建一个新的提交,以撤销已恢复的提交。这意味着原始提交是完整的,并且还具有仅删除违规提交的好处,而不是此后发生的所有提交。所以,如果你想摆脱的提交是 xxxxx,你可以这样做:

git revert xxxxx

默认情况下,提交消息会告诉其他人这是一个还原,并且它会显示原始提交 id,以便每个人都可以轻松找到还原的提交。

于 2012-07-14T05:53:27.290 回答
0

这就是我要做的。 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

于 2012-07-16T17:24:12.373 回答