Git:如何在提交之间来回移动

我有一个关于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 。

谢谢,翁德拉

那么,我也是一个前svn用户,现在使用git所有我的项目。

在使用git时,应该改变svn中使用的客户端 – 服务器体系结构的思维方式。 在svn中,每个变更都需要与服务器连接。 使用git,您的repo在工作目录中。 你不需要每个回购行动的连接。

只能使用git pushgit pull来同步回购。 想想像使用rsync或任何备份解决scheme,使两个地方有完全相同的内容。 就像连接外部备份硬盘一样,然后将其中的内容与主内容相同。 这是使用git pullgit push

如果你只是想回顾历史,可以使用git checkout 。 使用git history查看版本ID。 如果您使用Linux,请使用gitk来查看修订树。 在Windows中,龟git可以使用修订图显示它。

要回到最新版本,请使用git checkout master 。 在做任何命令之前,总要让自己做git status 。 此命令将显示任何您需要了解当前回购条件的信息,以及您需要采取的措施才能使其正确。 在做git pullgit push ,最好确保git status结果是包含文本working directory clean

如果你需要将文件恢复到之前的版本,可以使用git merge 。 在做一个文件之前,先用git difftesting一下。 例如: git diff rev1:rev2 filename 。 它会打印出两个版本之间的任何不同。 rev1中的更改​​将被rev2中的更改所取代。 所以要恢复,rev2将会比rev1更早。 在你满足diff的结果之后,用git merge ,只需要用mergereplacediff ,所有其他参数保持不变。

我希望这可以帮助你。 主要的关键是看你的工作目录是你的回购。 了解这将有助于您使用Git的全部function。 祝你好运。

您可以使用git checkout来检出任何提交,然后将其与分支名称一起使用以返回到已命名的分支。

git checkout出一个提交ID而不是一个分支名称移动你离开任何命名的分支和所谓的分离的头

如果你使用git reset那么它会把你的分支移回到旧的状态,孤立那些可能不是你想要的更新的提交。

其他的答案是资料性的,但我相信这是最接近OP的要求:

将这两个函数添加到〜/ .bashrc中:

 # checkout prev (older) revision git_prev() { git checkout HEAD~ } # checkout next (newer) commit git_next() { BRANCH=`git show-ref | grep $(git show-ref -s -- HEAD) | sed 's|.*/\(.*\)|\1|' | grep -v HEAD | sort | uniq` HASH=`git rev-parse $BRANCH` PREV=`git rev-list --topo-order HEAD..$HASH | tail -1` git checkout $PREV } 

用法:

 $ git_prev Previous HEAD position was 7042c8a... Commit message2 HEAD is now at d753ecc... Commit message1 $ git_next Previous HEAD position was d753ecc... Commit message1 HEAD is now at 7042c8a... Commit message2 

注意 :这些命令总是进入分离的HEAD状态。 如果你从当前签出的分支中git_prev然后git_next ,你将会回到最新版本,但是你将会处于分离的HEAD状态。 做git checkout BRANCH_NAME恢复正常。

要签出不同版本的文件,请使用

 git checkout rev -- filename 

其中rev可以是提交的ID,分支的名称,标签的名称或相对版本。

使用git loggitk查看检查版本,以查看您想要的文件的版本。

为了使这个文件的版本永久,你需要提交文件: git add filename; git commit filename git add filename; git commit filename

我不会推荐git pull来检查版本,因为它进行了合并 – 可能会修改你的当前状态。

在这种情况下,你不需要使用git reset ,除非你git add一个你决定不提交的文件。

试试git reflog ,它列出了在提交之间切换的提交和签出,甚至是在签出前一次提交时丢失的提交。

然后你可以尝试使用git checkout <hash of a commit>切换到提交。

希望这可以帮助!