git_ssh_usage
git在线练习平台
https://learngitbranching.js.org
代码托管平台push 时需要的 ssh 密钥
ssh 密钥生成
- 生成ssh密钥 ssh-keygen -t rsa 可以直接一路回车
- 打印密钥内容 cat ~/.ssh/id_rsa.pub
- 复制密钥到托管平台
- 查看.ssh/config文件,是否配置了你的ssh,没有配置不会被使用(在多人使用的情况下要注意)
ssh 配置
多个用户时,指定用户在代码托管平台所用的密钥
ssh-keygen 生成密钥时指定名称,比如加个后缀 .github来表示该密钥是用于github
1 |
|
ssh 连接远程主机时别名登录和免密登录
1 |
|
将公钥放在主机端 ~/.ssh/ 目录下使用
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 username@192.168.11.11
,或scp
传输到 .ssh 目录下, 然后就可以通过 ssh fgq
登录远程主机了
ssh 通过跳板机登录远程主机
1 |
|
上述配置实现ssh fgq
时先登录relay 机器,然后再登录到 fgq
主机。
github登录方式
配置文件
全局配置文件
全局配置文件有~/.gitconfig
和~/.git-credentials
两个
~/.gitconfig
对应着git config --global
命令。
1 |
|
比如修改GitHub账号名
1 |
|
在这里插入图片描述~/.gitconfig
文件就会相应的做出修改
~/.git-credentials
中文是资格证书,里面保存github的token,使每次登陆都可以免密,
该部分应该是https token,也可以直接使用上面介绍的 ssh 配置。
需要注意的是, 在hexo 的 deploy (_config.yml) 中,
1 |
|
1 |
|
局部配置文件
在使用
git init 文件目录
命令配置的git工作区中,即文件目录/.git/config
,是局部配置文件,对应着git config --local
命令。
.gitignore
也是只对当前工作区起作用,可以把要忽略的文件名填进去,然后Git就会自动忽略这些文件
示例:
1 |
|
git 命令
把修改/删除/新建文件添加到暂存区
- 修改和删除的
git add -u
--update - 修改和新建的
git add .
- 修改、删除和新建的
git add -A
-ALL
add后的东西撤销
git status
查看暂存区有哪些文件git reset HEAD
撤销暂存区所有文件到工作区 => 所有绿变红git reset HEAD /XXX/XXX.cpp
撤销暂存区特定的文件到工作区 => 特定绿变红git checkout -- 路径或文件
只能用于已经被索引的文件,从工作区撤销,路径可以是 . => 红变无git checkout -- .
=> 所有文件红变无
没有被索引的文件,意味着其是新文件,想红变无直接用 rm 即可
恢复到前一个commit, 并且将当前commit 的提交全部变为 绿色
git reset --soft HEAD^
恢复到前一个commit,并且将当前commit 的提交全部变为 红色
git reset --mixed HEAD^
--soft 和 --mixed 不会修改文件内容,只会修改文件在仓库的状态
将某个文件从当前提交中删除, 有一条删除该文件的修改,但文件内容不会变
git rm --cache test.txt
提交到本地仓库(repository)
git commit -m "记录版本信息"
提交暂存区文件到本地仓库
git log
查看commit-id和所有的版本信息
提交仓库后,再次修改而不保留上次commit信息
git commit --amend
在本地仓库内容没有合并入远程分支时,可以给上次commit的内容打补丁。打完补丁后,上次的commit-id和其版本信息都被本次的amend所覆盖 加上 --no-edit 可直接跳过修改comment
推到远程仓库,合入master
git push origin HEAD:refs/for/master
origin是远程仓库的代名词 master远程仓库的分支
避免push到远程合入时有冲突,先拉远程最新分支
git stash
把本地修改的内容保存到堆栈中git pull
拉取远程最新代码,并merge到本地HEADgit pull = git fetch ; git merge
git stash pop
修改内容从堆栈弹出 然后再 add,commit。这样可以基于当前的最新内容进行更改
merge时有冲突,手动修改冲突内容
打开冲突文件
1 |
|
TODO: 怎么用还不太确定 自动修改冲突,使用 git checkout --ours 或者 git checkout --theirs
单独克隆一个分支
git clone --branch 分支名 --depth 分支深度 单独克隆一个分支后git pull只能拉取当前分支的内容,若需要其他分支,需要先fetch到本地:git fetch origin [remote-branch]:[local-branch]
打补丁
制作补丁:git diff > xxx.patch 检查patch文件:git apply --stat xxx.patch 查看补丁是否能够干净顺利地应用到当前分支中: git apply --check xxx.patch 将补丁合入当前分支 git apply xxx.patch
git error 解决
fatal: refusing to merge unrelated histories
https://www.educative.io/answers/the-fatal-refusing-to-merge-unrelated-histories-git-error
git pull origin master --allow-unrelated-histories
参考: 修改git config配置文件
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!