Ond*_*žka 70 git pull reset git-pull
我有一个关于Git的新手问题:
我需要在分支的历史中来回移动.这意味着,我需要将所有文件放到一些旧版本中的状态,然后我需要回到存储库中的最新状态.我不需要提交.
使用SVN,它会
svn up -r800
Run Code Online (Sandbox Code Playgroud)
得到修订版800,和
svn up
Run Code Online (Sandbox Code Playgroud)
与存储库保持同步.
我知道我想要回复的提交的哈希,所以我试过了
git reset <hash>
Run Code Online (Sandbox Code Playgroud)
这似乎让我在那里.但后来我试过了
git pull
Run Code Online (Sandbox Code Playgroud)
但是抱怨冲突.
那么,通过分支历史的正确方法是什么?
我正在考虑SVN,所以不要指向我一些很好的教程.请注意,我已经检查了http://git.or.cz/course/svn.html和http://www.youtube.com/watch?v=8dhZ9BXQgc4.
谢谢,Ondra.
Don*_*nia 67
好吧,我也是以前的svn用户,现在我的所有项目都使用git.
使用git时,您应该改变svn中使用的客户端 - 服务器体系结构的思维方式.在svn中,每次更改都需要与服务器建立连接.使用git,您的repo位于工作目录中.每个repo操作都不需要连接.
仅使用git push和git pull与repo同步.可以想象它使用rsync或任何备份解决方案,使两个地方具有完全相同的内容.就像连接外部备份硬盘一样,然后使其内容与主内容相同.这就是使用git pull和git push.
如果您只是想要回顾历史,请使用它git checkout.请参阅修订版ID git history.如果您使用的是Linux,请使用gitk查看修订树.在Windows中,togise git可以使用修订图显示它.
要返回最新版本,请使用git checkout master.在做任何命令之前,总是让自己做git status.此命令将显示您需要了解的有关当前回购条件的任何信息,以及您需要采取哪些措施才能使其正确运行.之前做git pull和git push,它的更好,以确保git status结果是包含文本working directory clean.
如果您需要将文件恢复为以前的版本,则可以使用git merge.在对文件进行操作之前,先使用它进行测试git diff.例如:git diff rev1:rev2 filename.它将打印出两个版本之间的任何不同.rev1中的更改将替换为rev2中的更改.所以要做恢复,rev2将比rev1更旧.在满足diff结果后,使用git merge,只需替换diff为merge,所有其他参数保持不变.
我希望这可以帮助你.主要关键是看你的工作目录是你的回购.理解这将有助于您使用git来实现它的全部功能.祝好运.
CB *_*ley 37
您可以使用git checkout签出任何提交,然后将其与分支名称一起使用以返回到命名分支.
git checkout使用提交ID而不是分支名称会将您移出任何已命名的分支,并移动到所谓的分离头.
如果你使用git reset那么它会将你的分支本身移回旧状态,孤立最近的提交,这可能不是你想要的.
Rai*_*ere 27
其他答案是提供信息的,但我相信这最接近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
}
Run Code Online (Sandbox Code Playgroud)
用法:
$ 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
Run Code Online (Sandbox Code Playgroud)
注意:这些命令始终进入分离的HEAD状态.如果git_prev再git_next从当前已签出的分支,你最终会回来的最新版本,但你会在分离的头的状态.不要git checkout BRANCH_NAME让恢复正常.
小智 8
试试git reflog,这列出了你在提交之间切换的提交和检查,甚至是你在结账时丢失的提交到之前的提交.
然后您可以尝试git checkout <hash of a commit>切换到该提交.
希望这可以帮助!
要签出文件的其他版本,请使用
git checkout rev -- filename
Run Code Online (Sandbox Code Playgroud)
其中rev可以是提交的ID,分支的名称,标记的名称或相对版本.
使用git log,gitk查看检查版本以查看所需文件的版本.
要使此版本的文件永久化,您需要提交该文件: git add filename; git commit filename
我不建议git pull检查版本,因为它进行合并 - 可能会修改您当前的状态.
git reset在这种情况下,您不需要使用,除非git add您决定不提交文件.
| 归档时间: |
|
| 查看次数: |
64762 次 |
| 最近记录: |