我有一个关于Git的新手问题:
我需要在一个分支的历史中来回移动。这意味着,我需要让所有文件回到它们在某个旧版本中的状态,然后我需要回到仓库中的最新状态。我不需要提交。
有了SVN,它将是
svn up -r800
到修订版800,并且
svn up
与仓库同步。
我知道我想返回的提交的哈希值,所以我尝试了
git reset <hash>
这似乎让我到了那里。但后来我试着
git pull
但它抱怨冲突。
那么,在分支的历史中移动的正确方法是什么呢?
我在考虑SVN,所以不要犹豫给我一些好的教程。注意,我已经检查了http://git.or.cz/course/svn.html和http://www.youtube.com/watch?v=8dhZ9BXQgc4。
谢了昂德拉
6条答案
按热度按时间eqfvzcg81#
我以前也是svn用户,现在我所有的项目都使用git。
在使用git的时候,你应该改变一下svn中使用的客户端-服务器架构的思维方式。在svn中,每一个更改都需要连接到服务器。使用git,你的repo在工作目录中。你不需要每个repo操作都连接到服务器。
只使用
git push
和git pull
来与仓库同步。可以将其视为使用rsync或任何备份解决方案来使两个地方具有完全相同的内容。就像当您连接外部备份硬盘时,然后使其中的内容与主存储器中的内容相同。这就是git pull
和git push
的用法。如果你只是想在历史中来回查看,可以使用
git checkout
。使用git history
查看修订ID。如果你使用的是Linux,可以使用gitk
查看修订树。在Windows中,Tortoise git可以使用修订图来显示它。要返回到最新版本,请使用
git checkout master
。在执行任何命令之前,请始终执行git status
。此命令将显示您需要了解的有关当前回购条件的任何内容,以及您需要执行的操作。在执行git pull
和git push
之前,最好确保git status
结果显示working directory clean
。如果您需要将文件恢复到以前的版本,可以使用
git merge
。在对文件执行此操作之前,请先使用git diff
进行测试。例如:git diff rev1:rev2 filename
。它将打印出两个版本之间的任何差异。rev 1中的更改将被rev 2中的更改替换。因此要执行revert,rev 2将比rev 1旧。在您对diff结果满意之后,使用git merge
执行此操作,只需将diff
替换为merge
,所有其他参数保持不变。我希望这对你有帮助。主要的关键是要看到你的工作目录是你的仓库。理解这一点将有助于你充分利用git的能力。祝你好运。
1mrurvl12#
您可以使用
git checkout
来 checkout 任何提交,然后将其与分支名称一起使用以返回到已命名的分支。git checkout
使用提交ID而不是分支名称将您从任何命名的分支转移到所谓的 * 分离头 *。如果你使用
git reset
,那么它会将你的分支本身移回一个旧的状态,孤立最近的提交,这可能不是你想要的。gg0vcinb3#
其他的答案都是信息丰富的,但我相信这是最接近OP想要的:
将以下两个函数添加到~/.bashrc中:
使用方法:
git_prev
然后git_next
,你将最终回到最新的版本,但你将处于分离的HEAD状态。执行git checkout BRANCH_NAME
以恢复正常。zphenhs44#
试试
git reflog
,它列出了你在提交之间切换的提交和 checkout ,甚至是你在 checkout 到前一个提交时丢失的提交。然后你可以尝试
git checkout <hash of a commit>
来切换到那个提交。希望这有帮助!
hc8w905p5#
若要 checkout 文件的其他版本,请使用
其中 rev 可以是提交的ID、分支的名称、标记的名称或相对版本。
使用
git log
,gitk
查看检查版本以查看您想要的文件版本。要使此版本的文件永久化,您需要提交该文件:
git add filename; git commit filename
我不建议使用
git pull
来检查版本,因为它会进行合并--可能会修改您的当前状态。在这种情况下,您不需要使用
git reset
,除非您git add
您决定不提交的文件。3vpjnl9f6#
根据你在git历史中来回移动的原因,你可以考虑只查看历史。
我发现这篇文章试图找出如何最好地查看提交历史和更改,以便我可以熟悉一个项目。
-p
标志显示每次提交之间的差异。查看更多here。