git 常用命令

当你在错误的分支上做了修改,本来应在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 checkout -b localbranch 查看一下现在的分支状态: 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 :localbranch 也可以使用: git push origin --delete localbranch
这两种方式都可以删除指定的远程分支

当你遇到POSSIBLE DNS SPOOFING DETECTED! 时,只需要执行一行命令就能解决

国庆放假几天,回来拉代码,执行git pull,发现报WARNING: POSSIBLE DNS SPOOFING DETECTED!错。


01.png

根据提示可以看到主要是.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,如下图


02.png

原因说明:我们在ssh时,openssh会把访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,openssh会核对公钥。如果公钥不同,openssh会发出警告,避免你受到DNS Hijack之类的攻击。因此我们现在只需要删除knows_hosts文件中所对应的IP节点的公钥,然后再ssh IP地址就可以了。仔细看错误提示,也能看到IP地址,因此我们现在只需要删除knows_hosts文件中所对应的IP节点的公钥,然后再ssh IP地址就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我的常用: ===================================** 撤销工作修改:**1、gi...
    ddai_Q阅读 4,166评论 0 5
  • 最近一直被一本书弄的我欲罢不能,真想抛开工作,一口气把他读完才爽! 好了,不卖官司。我说的是村上春树的<<挪威的森...
    小李非刀阅读 1,495评论 2 0
  • 2017.1.4 1. 对一个类做扩展方法,面向对象中,对一个类要有开放扩展,关闭修改的原则 2. MSDN官方论...
    shannoon阅读 1,189评论 0 0
  • 一个人 静静地倾听 总涌上 莫名的心潮 海边的浪花 或许 享受着阳光 或许 洋溢着微笑 或许 埋葬着苦涩 说不尽地...
    我喜欢阿狸桃子阅读 1,209评论 2 3