关于Git与GitHub的记录

关于git的资料

关于git的资料

常用命令

  1. 配置 Git 环境:
    • git config -l: 查看当前 Git 配置信息。
    • git config --global user.name "Your Name": 设置全局用户名。
    • git config --global user.email "your.email@example.com": 设置全局用户邮箱。
  2. 基本操作:
    • git init: 在当前目录初始化一个 Git 仓库。
    • git add <file>: 将文件添加到暂存区。
    • git rm --cached <file>: 从暂存区中移除文件。
    • git commit -m "Commit message": 提交暂存区中的文件到本地仓库。
  3. 查看状态和日志:
    • git status: 查看工作区和暂存区的状态。
    • git log: 查看提交历史。
    • git log --graph --oneline: 查看简洁的提交历史图。
  4. 远程仓库操作:
    • git remote add origin <url>: 关联远程仓库。
    • git push -u origin master: 推送本地仓库内容到远程仓库。
    • git clone <url> <directory>: 克隆远程仓库到本地。
    • git pull origin master: 拉取远程仓库内容到本地。
  5. 分支操作:
    • git branch: 显示分支列表。
    • git branch <branch-name>: 创建新分支。
    • git checkout <branch-name>: 切换到指定分支。
    • git merge <branch-name>: 将指定分支合并到当前分支。
    • git branch -d <branch-name>: 删除指定分支。
  6. 高级操作:
    • git rebase master: 将当前分支的提交整合到主分支。
    • git rebase --continue: 在解决冲突后继续 rebase 操作。
    • git rebase --abort: 取消正在进行的 rebase 操作。
  7. 其他命令:
    • git fetch: 从远程仓库获取最新内容。
    • git tag: 打标签并管理标签。
    • git grep <pattern>: 在文件中搜索指定内容。
    • git grep -n <pattern>: 显示搜索结果行号。

rebase 与 merge

git rebase 适合用于合并一些临时性的分支或者个人开发分支,它可以将这些分支的提交整理成一个线性的提交历史,保持提交历史的干净和整洁,并且不会产生额外的合并提交。这样的操作适合于个人开发或者小团队开发的场景。

git merge 则更适合用于合并一些功能性分支或者长期稳定的分支,它会在目标分支上创建一个新的合并提交,将源分支的修改合并进来。这样的操作会保留分支之间的关系,形成一个分叉的提交历史结构,适合于多人协作或者长期开发的场景。

具体使用的话总结: 子分支 rebase master , master merge 子分支

多账号

一台电脑多账号的情况下区分各自仓库

1
2
git config --global user.name
git config --global user.email
1
2
git config --global --unset user.name
git config --global --unset user.email
1
2
ssh-keygen -t rsa -b 4096 -C "个人账号@example.com" -f ~/.ssh/id_rsa_my
ssh-keygen -t rsa -b 4096 -C "工作账号@example.com" -f ~/.ssh/id_rsa_work

~/.ssh/现在得到了:

1
2
3
4
5
id_rsa_my #私钥
id_rsa_my.pub #公钥

id_rsa_work #私钥
id_rsa_work.pub #公钥
  • 私钥
  • 公钥绑定到GitHub
1
2
ssh-add -K ~/.ssh/id_rsa_my
ssh-add -K ~/.ssh/id_rsa_work

关于ssh代理看这里

打开github.com, 设置 > SSH 和 GPG 密钥 > 新 SSH 密钥

将之前的后缀为.pub的公钥复制 , 添加进去

现在到~/.ssh/config

如果没有就新建一个

1
touch config

config中写入

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 个人 GitHub 账号
Host taylorswift
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_my

# 工作 GitHub 账号
Host zhangsan
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_work

现在本地没有全局user.email和user.name

所以各自账号的仓库都需要手动的配置一次

1
2
3
4
5
6
7
git config user.email "taylorswift@gmail.com"
git config user.name "taylorswift"

# or

git config user.email "zhangsan@gmail.com"
git config user.name "zhangsan"

现在添加远程仓库需要改动一些内容

这是原来的

1
git clone git@github.com:<用户名>/<仓库名>.git

改成

1
git clone git@<Host>:<用户名>/<仓库名>.git
  • Host 就是config文件里你配置的 Host

eg:

1
2
git clone git@taylorswift:taylorswift/repo111.git
git clone git@zhangsan:zhangsan/repo111.git
1
2
ssh -T git@<host>.com
ssh -T git@gitlab.com
  • 如果返回kex_exchange_identification: Connection closed by remote host

    可以更改config配置

  • 配置1

    • 不指定端口
    • HostNmae使用 github.com
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 个人 GitHub 账号
Host taylorswift
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_my

# 工作 GitHub 账号
Host zhangsan
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_work
  • 配置2
    • 指定443端口
    • HostNmae使用 ssh.github.com
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 个人 GitHub 账号
Host taylorswift
    HostName ssh.github.com
    User git
    IdentityFile ~/.ssh/id_rsa_my
    port 443

# 工作 GitHub 账号
Host zhangsan
    HostName ssh.github.com
    User git
    IdentityFile ~/.ssh/id_rsa_work
    port 443

这时候再次进行测试

1
2
3
4
5
$ ssh -T git@taylorswift
Hi taylorswift! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git@zhangsan
Hi zhangsan! You've successfully authenticated, but GitHub does not provide shell access.

这样就完成了!


疑难杂症

Q: # [ssh: connect to host github.com port 22: Connection timed out](https://stackoverflow.com/questions/15589682/ssh-connect-to-host-github-com-port-22-connection-timed-out) A:

1
2
3
Host github.com
    Hostname ssh.github.com
    Port 443

https://blog.csdn.net/qq_27071221/article/details/129823579