SSH 以及 Git的学习及使用笔记
git使用
创建版本库
1 | $ mkdir gitfile |
链接远程版本库
在本地仓库文件夹下执行命令
1 | git remote add origin git@github.com:username/username.git |
然后执行推送命令
1 | git push -u origin master |
更换远程库
1 | # 先删除本地已添加的远程库 |
同一系统下使用多个“git提供商”的SSH配置
修改 ~/.ssh/config
文件对应相应的SSH文件
1 | # config配置 |
同时需要把不同HOST对应的公钥分发到对应的不同的主机中,普通主机需要添加在./ssh/authorized_keys
中。
只克隆git仓库中的一个分支
1 | 这就是答案啊 git clone -b <branch> <remote_repo> 例如: git clone -b 指定的分支名字 |
命令使用
基本命令
Setup1:git add file
把文件添加到暂存区
Setup2:git commit
把暂存区文件提交到当前分支
Setup3:git push
把文件推送到远程服务器
其它常用
git diff
查看文件修改了哪里,与上次有哪些不同git log
查看文件被那些人修改了,以及修改说明git log --pretty=oneline
上一命令的信息简化git log --graph
查看分支合并图git reflog
查看在git中的每一次操作的命令git reset
撤销add操作git reset --hard HESD^
恢复到上一个版本git reset --hard HEAD^^
恢复到上二个版本git reset --hard HEAD~100
恢复到上100个版本git reset --hard 3628164
恢复到ID为3628164…的版本git reset HEAD file
当修改文件仅仅被保存到暂存区时,需要撤销修改的第一个命令git checkout file
当修改文件仅仅被保存到暂存区时。需要撤销修改时第二个命令 或是 未做任何保存时的撤销命令git branch
查看分支git branch <name>
创建分支git chekout <name>
切换分支git merge <name>
合并某分支到当前分支git branch -d <name>
删除分支git tag v1.4
创建轻量标签git tag -a v1.4 -m 'my version 1.4
创建含附注的标签git tag
查看所有标签git show
查看某一标签信息git tag -a v1.2 9fceb02
后期加注标签git push origin v1.5
分享特定版本号标签git push origin --tags
一次性推送所有标签
关于文件的删除
直接执行 rm file 命令 ,导致工作区与版本库内容不一致,分下面的两种情况
情况一:确实需要删除
1 | git rm file |
情况二: 需要恢复
1 | git checkout -- file |
同步远程分支到本地
git pull
:获取最新代码到本地,并自动合并到当前分支
1 | //查询当前远程分支 |
git fetch + merge
: 获取最新代码到本地,然后手动合并分支
1 | # 方法一 :额外建立分支,然后合并,间接达成目的 |
解释git fetch
是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。 而git pull
则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge
,这样可能会产生冲突,需要手动解决。
git错误
fatal: Not a git repository (or any of the parent directories): .git
错误提示
1 | fatal: Not a git repository (or any of the parent directories): .git |
使用命令:
1 | git add * |
解决办法:
1 | git init |
error: 无法推送一些引用到
错误提示
1 | error: 无法推送一些引用到 'https://github.com/momoxiangbei/php.git' |
使用命令
1 | git push |
解决办法
究其原因,远程有本地不存在的文件,需要使用git push --force
或是删除远程库中不同的文件(不推荐)
error:src refspec master does not match any
错误提示
1 | error:src refspec master does not match any |
使用的命令
在使用完git init
后,直接使用git remote add origin git@git.oschina.next:xfnotes/Node-blog.git
,然后又使用git push -u origin master
解决办法
没有使用git add file
导致的错误,应依次使用
1 | git add file |
warning:LF will be replaced by CRLF
此种情况一般为windows下使用git时出现的情况
** 原因 **
windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现 warning:LF will be replaced by CRLF
** 解决办法 **
1 | $ rm -rf .git |
此错误在我配置window的git时遇到的,解决方法来源于unity的博客
配置ssh之后,git push 仍然需要输入账号密码
** 原因 **
多种情况,其中一种是在.ssh
中缺少config文件
,配置对应的密钥,另一种是因为配置remote
远程库时,使用的时https
连接,而不是git@
链接,下面针对第二种情况做一个解决方案。
** 解决办法 **
无非就是更换https
为git@
类型的远程链接
1 | # 方法1 |
使用第二种方法之后再push极易出现问题fatal: The current branch master has no upstream branch. To push the current
。
这样的原因很简单——表示本地分支与远程分支之间没有连接起来,所以在push
的时候报错。
解决办法:git push -u origin dev(远程分支名)
。
SSH
首先,要明白 公钥和私钥 是可以任何人持有的。
SSH在linux中使用终端登录远程linux服务器
- 拥有一对 秘钥-私钥、公钥
- 把公钥分发到远程linux服务器的
./ssh
下的authorized_keys
文件中 - 把相应的私钥分发到自己的本地linux的
./ssh
下,并在本文件夹下的config
中做好配置 - 打开本地的linux终端,输入
ssh 远程服务器的username@ip地址
即可
从一台”电脑a”复制id_rsa
到另一台”电脑b”,在”电脑b”使用git clone
时提示 Permissions 0644 for ‘/root/.ssh/id_rsa’ are too open
** 原因分析 **
ssh的私有密钥的权限过于开发,可以供人随意欣赏了,ssh自身的策略关闭了ssh。摘自立体风。
** 解决措施 **
1 | chmod 0600 /root/.ssh/id_rsa //将权限由0644降低为0600 |