Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 是否将工作副本还原为较旧的提交?_Git_Github - Fatal编程技术网

Git 是否将工作副本还原为较旧的提交?

Git 是否将工作副本还原为较旧的提交?,git,github,Git,Github,我需要恢复到提交e4ea7bf73124968e2f68012f77837df2046fd6e5。换言之,我想彻底擦除之后的所有提交 根据其中一个答案,我现在做的是: git clone git@github.com:superflycss/utilities-layout.git cd utilities-layout git reset e4ea7bf73124968e2f68012f77837df2046fd6e5 # Moves pointer back to previous HE

我需要恢复到提交
e4ea7bf73124968e2f68012f77837df2046fd6e5
。换言之,我想彻底擦除之后的所有提交

根据其中一个答案,我现在做的是:

git clone git@github.com:superflycss/utilities-layout.git
cd utilities-layout

git reset e4ea7bf73124968e2f68012f77837df2046fd6e5 
# Moves pointer back to previous HEAD
git reset --soft HEAD@{1}

git commit -m "Revert to e4ea7bf73124968e2f68012f77837df2046fd6e5"

# Updates working copy to reflect the new commit
git reset --hard

在这一点上,我认为我在家是自由的,但当我做了一个ls,所有的文件,在原始的克隆仍然存在。这就好像根本没有发生任何逆转。想法?

要以最少的改变来实现您的目标,请切换到以下命令序列:

git clone git@github.com:superflycss/utilities-layout.git
cd utilities-layout
(到目前为止还是一样的,但后来:)

(注意此处添加了
--hard
),然后返回到之前的内容:

git reset --soft HEAD@{1}
git commit -m "Revert to e4ea7bf73124968e2f68012f77837df2046fd6e5"
此后不需要额外的
reset
,因为第一次
git reset
调整了索引和工作树(同时也修改了存储在分支名称中的哈希)。第二个
git reset
只修改存储在分支名称中的哈希,为
git提交做好准备

最初的命令序列在第一步中使用了
--mixed
重置。这会在写入新哈希时重置索引,但不会影响工作树。第二个是软重置,修复了存储的散列ID。第三个是硬重置--git-reset--hard
保留未跟踪的工作树文件:这些文件在第一次
git-reset
时未跟踪,此后一直未跟踪。换句话说,由于第一次重置是混合的,所以这些工作树文件从未被删除,现在也不会被删除



(旁注:我可能会通过一个
git read tree
然后是一个
git commit
,而不是多个
git reset
命令来实现这一点。但这是一种不同的策略,并没有解释您使用的方法发生了什么。因此,上面的答案确实解释了这一点。)

若要以最少的更改来实现所需,请切换到以下命令序列:

git clone git@github.com:superflycss/utilities-layout.git
cd utilities-layout
(到目前为止还是一样的,但后来:)

(注意此处添加了
--hard
),然后返回到之前的内容:

git reset --soft HEAD@{1}
git commit -m "Revert to e4ea7bf73124968e2f68012f77837df2046fd6e5"
此后不需要额外的
reset
,因为第一次
git reset
调整了索引和工作树(同时也修改了存储在分支名称中的哈希)。第二个
git reset
只修改存储在分支名称中的哈希,为
git提交做好准备

最初的命令序列在第一步中使用了
--mixed
重置。这会在写入新哈希时重置索引,但不会影响工作树。第二个是软重置,修复了存储的散列ID。第三个是硬重置--git-reset--hard
保留未跟踪的工作树文件:这些文件在第一次
git-reset
时未跟踪,此后一直未跟踪。换句话说,由于第一次重置是混合的,所以这些工作树文件从未被删除,现在也不会被删除



(旁注:我可能会通过一个
git read tree
然后是一个
git commit
,而不是多个
git reset
命令来实现这一点。但这是一种不同的策略,并没有解释您使用的方法发生了什么。因此,上面的答案确实解释了这一点。)

要恢复到特定的提交,只需

git reset --hard <COMMIT_HASH>

要恢复到特定的提交,只需

git reset --hard <COMMIT_HASH>

要删除所有未跟踪的文件,请在repo的根目录中使用git clean-fdx。这还将删除未跟踪的目录(d)和名为.gitignore(x)的文件。要删除所有未跟踪的文件,请使用repo根目录中的
git clean-fdx
。这还将删除未跟踪的目录(d)和名为.gitignore(x)的文件。