1.今天试git的时候最后一步 git本地仓库push远程仓库的时候,出了这个错:
fatal the current branch master has no upstream branch
解决方案 : 用如下命令提交
git push -u origin master
2.想创建远程分支testT,直接在master下执行以下命令,报错如下
$ git push -u origin testT
出现如下错误:
error: src refspec testT does not match any.
error: failed to push some refs to 'git@github.com:hahaha/ftpmanage.git'
原因:本地分支为空
解决方法如下:
1).在本地创建分支 testT
2).然后执行git push origin testT 就可以了
3.回退后push问题:
我执行了git log --pretty=oneline拿到commit ID后执行回退
git reset --hard commit ID
但是工作区的内容回退到以前的代码,远程库里面没改变, 我有执行 git add * ....当我去执行git push的时候提示: On branch master Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch)
nothing to commit, working tree clean 让我先拉取,我拉取的话远程库的代码会又回到本地工作区里,这不是没回退一样么?
答:
假设一开始你的本地和远程都是:
a -> b -> c
你想把HEAD回退到b,那么在本地就变成了:
a -> b
这个时候,如果没有远程库,你就接着怎么操作都行,比如:
a -> b -> d
但是在有远程库的情况下,你push会失败,因为远程库是 a->b->c,你的是 a->b->d
两种方案:
- push的时候用--force,强制把远程库变成a -> b -> d,大部分公司严禁这么干,会被别人揍一顿
- 做一个反向操作,把自己本地变成a -> b -> c -> d,注意b和d文件快照内容一莫一样,但是commit id肯定不同,再push上去远程也会变成 a -> b -> c -> d
简单地说就是你无法容易地抹去远程库的提交信息,所以本地提交怎么都行,push前想好了
使用 git revert <commit_id>操作实现以退为进, git revert 不同于 git reset 它不会擦除"回退"之后的 commit_id ,而是正常的当做一次"commit",产生一次新的操作记录,所以可以push,不会让你再pull 其他的不敢妄加猜测。
git diff #是工作区(work dict)和暂存区(stage)的比较
git diff –cached #是暂存区(stage)和分支(master)的比较