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来与repo同步。 想想像使用rsync或任何备份解决方案,使两个地方有完全相同的内容。 就像连接外部备份硬盘一样,然后使其中的内容与主内容相同。 这就是git pullgit push的用法。

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

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

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

我希望这可以帮助你。 主要的关键是看你的工作目录是你的回购。 理解这将帮助你使用git来完成它的功能。 祝你好运。


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

使用提交标识而不是分支名称的git checkout会将您从任何命名分支移到离开的头部。

如果你使用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恢复正常。

链接地址: http://www.djcxy.com/p/23611.html

上一篇: Git: How to move back and forth between commits

下一篇: Where does a Git branch start and what is its length?