我一直在想,git reset并且git checkout同样地,在这个意义上,两者都将项目带回特定的提交.但是,我觉得它们不可能完全相同,因为这将是多余的.这两者之间的实际差异是什么?我有点困惑,因为svn只svn co需要恢复提交.
在下面的图解释了差别,尽管在一个或者可能过于简化的或不正确的方式进行.你怎么看?是错误还是过度简化?

VonC和Charles解释了两者之间的差异,git reset并且git checkout非常好.我目前的理解是git reset将所有更改还原为特定提交,而git checkout更多或更少的准备分支.我发现以下两个图对于理解这些图非常有用:

从http://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html,checkout和reset可以模拟反叛.
git checkout bar
git reset --hard newbar
git branch -d newbar
Run Code Online (Sandbox Code Playgroud)
我今天最终得到了一个独立的头,同样的问题如下所述:git push说一切都是最新的,即使我有本地更改
据我所知,我没有做任何与众不同的事情,只是从我当地的回购中提交和推送.
那我怎么最终得到一个detached HEAD?
我只有一个分支.几个月来我一直在用
git push origin master
Run Code Online (Sandbox Code Playgroud)
提交到我的本地存储库.昨晚我对我的本地存储库进行了一些小的更改,并试图使用相同的命令,我得到了这个错误:
error: RPC failed; result=22, HTTP code = 411
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索并发现了这个问题和这个问题,但这些问题的答案都没有解决我的问题.
大多数答案都表明头部脱落的问题.但我不认为我的头是分离的.我也不认为我在错误的分支上(因为我只有一个分支......)
我做了一些实验来弄清楚什么是错的,这是我得到的结果:
(1)首先是我的git status输出
Run Code Online (Sandbox Code Playgroud)# On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # egal.aux # egal.blg # egal.out # egal.pdf # egalcar.aux # egalcar.blg # egalcar.pdf nothing added to …
我是heroku的新手.我创建了一个非常简单的rails应用程序,并将其部署到heroku.
我怎样才能将更改提交给git?
我的Ant build.xml脚本以
<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>
<echo>PWD = ${env.PWD}</echo>
Run Code Online (Sandbox Code Playgroud)
Hudson CI设置为在任何分支更改时构建.控制台输出是......
Commencing build of Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48)
GitAPI created
Checking out Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48)
[workspace] $ git.exe checkout -f 90906a63929e9074035eb5b10c71ee055ad3e13c
[workspace] $ cmd.exe /C '"C:\Program Files\WinAnt\bin\ant.bat" -file build.xml ...'
[echo] GIT_BRANCH = ${env.GIT_BRANCH}
[echo] PWD = /cygdrive/d/.hudson
Run Code Online (Sandbox Code Playgroud)
从控制台输出,Hudson知道它正在构建主题分支DPM-48但是没有设置环境变量GIT_BRANCH并且'git branch'返回git处于'分离的HEAD'状态
* (no branch)
master
DPM-48
Run Code Online (Sandbox Code Playgroud)
我想知道的是我正在哈德森建立的分支.必须有办法做到这一点.
我在gitk上找不到关于颜色含义的任何文档,但我认为这里的问题是我的黄色按钮已经通过了我的主人.现在,当我尝试做:
git push origin master
它不起作用.我的黄色按钮是如何克服主人的,我如何将它们重新组合在一起以便我可以做推动原始主人?
我已经创建了git存储库,添加了代码并将其推送到GitHub.
然后在本地,我编辑了文件Eila.Analyser/Program.cs,在第一次提交时添加到GitHub,保存并git status说没有变化.
好吧,我认为,一定搞砸了,git reset --hard HEAD并且据我所知,应该还原所有内容,但我的文件不会被还原.
所以我觉得我做错了什么.我编辑根文件夹中的文件,git status- 显示有更改,工作为可疑,因此它适用于根文件夹中的文件,但不适用于子文件夹中的文件.
我错过了一些明显的东西吗?
更新:证据,我正在编辑的文件真的被提交(git log --stat):

如果有帮助,树图片:

UPDATE2:好的,我以为我真的搞砸了,所以我删除了文件夹,我的解决方案在哪里,再次从gitHub克隆,我的本地代码仍然与gitHub中的现有代码不同,git status看不到任何更改,git log origin/master..HEAD什么都不给.
我有一个IPython笔记本,它的大小为几兆字节,尽管其中的代码仅约100行。我认为它很大,因为我在其中加载了多个图像。
我想将此笔记本添加到git存储库中。但是,我不想上传可以轻易再次生成的大文件。
是否可以仅保存IPython Notebook的代码以减小其大小?
reflog vs GITK http://siteroller.net/archive/images/Forums/headless%20GIT.png
顶部图像是输出:git reflog.
底部是GIT GUI(msysgit)中的GITK在查看所有分支历史时向我显示的内容.
最后几次提交没有在GIT GUI上显示.
第一个问题很重要 - 我想开始了解GIT的想法.在这一点上,它比逻辑更具神谕性.