当你在错误的分支上做了修改,本来应在A上修改,结果在B上修改了。那么怎么办呢?
不着急,有办法~
1)如果你在分支B上的文件还没有commit
- 先 git stash,把没有commit的更改文件暂存在一个地方,这个地方git知道,你是看不到的。
- 切换到正确的分支A。
- 使用git stash pop 命令,把暂存的文件找回来。
这个时候无论你是想在正确的分支上继续修改,还是直接commit都没有问题。
这就是 [ git stash ] 和 [ git stash pop ] 的秘密。
总结而言:先保存好修改的版本,然后切换分支,切换回来再去把修改的拉回来。
2).代码不但改了,还提交了怎么办。
git checkout 不该提交代码提交了代码的分支
git reset HEAD~1 (最近一次提交放回暂存区, 并取消此次提交)
git stash (把暂存的文件提交到git的暂存栈)
git checkout 该提交代码的分支
git stash pop 把暂存栈的文件找回来,你还可以继续修改,或者把代码提交到了正确的分支后,然后再次切到刚刚错的分支
git push origin 错误的分支 -f (把不该上去的文件回退掉)
当我们用https clone项目到本地的时候,git push命令每次都需要输入密码,下面的方法可以很快的解决这个麻烦。
git config credential.helper store
git pull
然后会让你输入帐号和密码
再执行git pull 命令后,就不再需要输入帐号和密码了。
file ~/.git-credentials
cat ~/.git-credentials
通过查看上面的命令,你可以发现密码其实是明文存在途中的 ~/.git-credentials 这个文件里的,你可以打开看呢。
如果嫌git log 输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
git log --pretty=oneline
Git创建远程分支
现在我在master分支上,工作目标是干净的,也没有需要commit的:
$ git branch
- master
release
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
新建远程分支
新建一个本地分支:
git branch
*localbranch
master
release
星号(*)表示当前所在分支。现在的状态是成功创建的新的分支并且已经切换到新分支上。
把新建的本地分支push到远程服务器,远程分支与本地分支同名(当然可以随意起名):
$ git push origin localbranch:localbranch
使用git branch -a查看所有分支,会看到remotes/origin/localbranch这个远程分支,说明新建远程分支成功。
建立本地到上游(远端)仓的链接 --这样代码才能提交上去
git branch --set-upstream-to=origin/localbranch
就OK了
删除远程分支
我比较喜欢的简单方式,推送一个空分支到远程分支,其实就相当于删除远程分支:
git push origin --delete localbranch
这两种方式都可以删除指定的远程分支
当你遇到POSSIBLE DNS SPOOFING DETECTED! 时,只需要执行一行命令就能解决
国庆放假几天,回来拉代码,执行git pull,发现报WARNING: POSSIBLE DNS SPOOFING DETECTED!错。
根据提示可以看到主要是.ssh/known_hosts的第32行发送冲突,这一行也是我们代码库对应的公钥,解决办法就是把~/.ssh/known_hosts里面对应IP节点的公钥删掉。也就是ssh重新验证
$ ssh-keygen -f 加上图第二个红框中的地址 -R 加上图第一个红框中的地址
例如:ssh-keygen -f /Users/youName/.ssh/known_hosts -R git.17usoft.com
修改完成后重新验证会提示是否重新链接,输入yes,如下图
原因说明:我们在ssh时,openssh会把访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,openssh会核对公钥。如果公钥不同,openssh会发出警告,避免你受到DNS Hijack之类的攻击。因此我们现在只需要删除knows_hosts文件中所对应的IP节点的公钥,然后再ssh IP地址就可以了。仔细看错误提示,也能看到IP地址,因此我们现在只需要删除knows_hosts文件中所对应的IP节点的公钥,然后再ssh IP地址就可以了。