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 push
和git pull
来同步回购。 想想像使用rsync或任何备份解决scheme,使两个地方有完全相同的内容。 就像连接外部备份硬盘一样,然后将其中的内容与主内容相同。 这是使用git pull
和git push
。
如果你只是想回顾历史,可以使用git checkout
。 使用git history
查看版本ID。 如果您使用Linux,请使用gitk
来查看修订树。 在Windows中,龟git可以使用修订图显示它。
要回到最新版本,请使用git checkout master
。 在做任何命令之前,总要让自己做git status
。 此命令将显示任何您需要了解当前回购条件的信息,以及您需要采取的措施才能使其正确。 在做git pull
和git push
,最好确保git status
结果是包含文本working directory clean
。
如果你需要将文件恢复到之前的版本,可以使用git merge
。 在做一个文件之前,先用git diff
testing一下。 例如: git diff rev1:rev2 filename
。 它会打印出两个版本之间的任何不同。 rev1中的更改将被rev2中的更改所取代。 所以要恢复,rev2将会比rev1更早。 在你满足diff的结果之后,用git merge
,只需要用merge
replacediff
,所有其他参数保持不变。
我希望这可以帮助你。 主要的关键是看你的工作目录是你的回购。 了解这将有助于您使用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 log
, gitk
查看检查版本,以查看您想要的文件的版本。
为了使这个文件的版本永久,你需要提交文件: 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>
切换到提交。
希望这可以帮助!