理解git中的提交?

时间:2015-08-10 14:52:16

标签: git github

首先,我是Web开发的新手,所以如果我犯了任何明显的错误,请告诉我。

所以我决定,如果我想开始制作网站,我可能需要学习Git和GitHub。

我目前了解如何初始化存储库,暂存和提交并将其全部推送到GitHub页面。我现在正在努力的是恢复旧提交的过程。所以假设我已经做了两次提交,分别叫做commit 1,commit 2。

如果我在提交2我怎么回去提交1?我可以回去提交一个更改代码提交更改并仍然返回提交2后?在提交之间移动时,代码和文件会发生什么特别的情况。

请随便跟我说话,就像一个5岁的老人,他与Git和命令行无关。先谢谢你们。

1 个答案:

答案 0 :(得分:1)

您可以使用reset命令浏览历史记录。看它有多容易,首先让我们创建两个文件:

$ touch a
$ touch b

让我们提交其中一个:

$ git add a
$ git co -m "First commit"
[master d263314] First commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a

让我们提交另一个:

$ git add b
$ git co -m "Second commit"
[master 16aa86a] Second commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 b

现在让我们查看历史记录:

$ git log --oneline
16aa86a Second commit
d263314 First commit
38df137 Initial commit

正如您所看到的那样,有三个提交,并且它们具有哈希代码以进行distingush它们。 有一个特殊的指针指向历史记录之上的提交。它被称为HEAD。当提交a文件时,HEAD指向此提交,但是当提交第二个文件时,HEAD开始指向第二次提交。

reflog命令可帮助您跟踪HEAD指向的历史记录。

$ git reflog
16aa86a HEAD@{0}: commit: Second commit
d263314 HEAD@{1}: commit: First commit
38df137 HEAD@{2}: commit (initial): Initial commit

为了摆脱最近的提交,你需要在之前的一次提交中使用HEAD点。这是reset命令出现的时间。

$ git reset --hard HEAD@{1}
HEAD is now at d263314 First commit

小心,所有未分段的数据都会丢失。我们来看看历史:

$ git log --oneline
d263314 First commit
38df137 Initial commit

但是有可能不仅跳转到之前的提交之一,也可以跳转到任何提交,让我们回到第二次提交:

$ git reset --hard 16aa86a
HEAD is now at 16aa86a Second commit

让我们查看历史记录:

$ git log --oneline
16aa86a Second commit
d263314 First commit
38df137 Initial commit

正如您所见,历史记录已恢复

花点时间阅读amazing book我保证你会成为一名经验丰富的Git用户