Git操作碰到问题的解决思路

687 阅读6分钟

这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战

前言

我们在做项目代码提交的时候,我们经常会因为种种问题而烦恼,我整理了一些git操作碰到问题的解决思路。大家一起来看看吧!

实际遇到的问题与解决Mark

1、将本地已有的一个项目上传到新建的git仓库的方法

将本地已有的一个非git项目上传到新建的git仓库的方法一共有两种。

Ⅰ- 克隆+拷贝

第一种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去。然后push到远程仓库上去即可。此方法适用于本地项目不是一个git仓库的情况。

具体步骤如下:

1、首先克隆

git clone git@github.com:yuanmingchen/tensorflow_study.git

2、然后复制自己项目的所有文件到刚刚克隆下来的仓库中

3、最后push到远程仓库上面去:

git push -u origin master

Ⅱ- 强行合并两个仓库

第二种方法就是先将本地的项目初始化为一个git仓库,然后再强行合并本地仓库和远程仓库,由于这两个仓库是完全不同的两个仓库,所以直接pull都会报错,需要在pull的时候假加上–allow-unrelated-histories才可以pull成功。此方法适用于本地项目已经是一个git仓库的情况。

具体步骤如下:

1、新建git仓库,将本地项目设置为一个git仓库。如果本地项目已经是一个git仓库了,请跳过这一步。在项目根目录下:

git init

2、把当前目录下的已有文件全部加到刚刚新建的git仓库中:

git add .

3、保存刚刚加入的文件,并书写保存信息:

git commit -m "push current files"

4、将本地仓库与远程仓库关联起来:

git remote add origin git@github.com:yuanmingchen/tensorflow_study.git

5、pull远程仓库的内容,更新本地仓库,使用–allow-unrelated-histories忽略本地仓库和远程仓库的无关性,强行合并(关键):

git pull origin master --allow-unrelated-histories

6、把本地仓库的内容push到远程仓库:

git push -u origin master

然后就ok了。

Ⅲ- 其他git命令

最后附上git的一些其他命令: 1、删除已将关联的远程主机

git remote rm origin

2、查看所有本地分支

git branch -a

3、新建一个分支,名字叫xf

git branch xf

4、切换分支到xf分支

git checkout xf

5、把远程分支的代码pull到本地分支:git pull <远程主机名> <远程分支名>:<本地分支名> 如:取回origin主机的master分支,与本地的xf分支合并,输入命令:

git pull origin master:xf

6、推送当前的分支,git push <远程主机名> <本地分支名>:<远程分支名> PS:注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。 如:把本地的xf分支推送到origin主机的master分支,输入命令:

git push origin xf:master

2、解决同一台电脑生成两份或多份ssh密钥、公钥映射两个或多个GitHub账号

此解决方案由百度多个方案结合而来,截取对我有用部分

Ⅰ- 需求分析

本人注册一个GitHub账户,用来分享本人自己的开源项目或者代码,同时,公司注册了一个GitHub账户,用来分享公司的开源项目。如果按照单个ssh公钥生成的方法则会把之前的公钥覆盖掉,这样将导致其中一方在下一次上传代码,本机和GitHub无法映射成功。

解决这个问题首先要明确如何生成单个ssh公钥。 ssh生成单个公钥命令:ssh-keygen -t rsa -b 4096 -C "your_email@example.com"如何生成ssh公钥 上述命令会在当前~/.ssh目录下生成id_rsaid_rsa.pub两个文件。其中id_rsa是私钥文件,id_rsa_.pub是公钥文件。 id_rsaid_rsa_.pub文件都是通过一个邮箱号生成的,同一个公钥文件不可以配置两个不同GitHub账户(已测试)。 那么两个GitHub账户就需要两个不同的邮箱号,来生成两组不同的公钥文件。

Ⅱ- 解决方案思路

命令:ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_example 示例:分别以791815567@qq.comgalaxysoft@sina.cn两个邮箱在~/.ssh目录下生成两级不同的公钥文件。 791815567@qq.com邮箱:ssh-keygen -t rsa -C "791815567@qq.com" -f ~/.ssh/id_rsa_me galaxysoft@sina.cn邮箱:ssh-keygen -t rsa -C "galaxysoft@sina.cn" -f ~/.ssh/id_rsa_galaxysoft 生成过程可参考如何生成单个ssh公钥 这篇文章。 执行完成后,会以~/.ssh目录下看791815567@qq.com邮箱对应的私钥文件id_rsa_me、公钥文件id_rsa_me.pubgalaxysoft@sina.cn邮箱对应的私钥文件id_rsa_galaxysoft、公钥文件id_rsa_galaxysoft.pub 分别在两个GitHub账户中添加对应的公钥信息即可,可参考如何生成单个ssh公钥 这篇文章

Ⅲ- 生成新ssh key

如果我们电脑上已经存在了一个ssh key,那么我们需要在我们电脑上生成第二个你想在本电脑上使用的id_rsa,使用命令:ssh-keygen -t rsa -C "你的github注册邮箱"

下图红色标注部分会提示你把新生成的id_rsa存放到哪里,此处默认会存放在c盘的用户名下的.ssh文件夹下(即你第一个github用户ssh key存放的目录),因此我们需要输入路径/c/Users/DodoMonster/.ssh(注意此路径是你的系统盘下用户目录安放ssh密钥的目录,请使用自己电脑上相对应的目录),最后我以“id_rsa_me”重新命名了ssh key防止默认与已有的ssh key重复。

在输入了路径后,会提示你输入提交项目时输入的验证密码,不输则表示不用密码,这是为了防止别人随便在你的项目上push东西,所以最好还是输入以下你的密码。回车,再重复输入确认回车即可。

Ⅳ- 添加新ssh key

默认SSH只会读取id_rsa,所以为了让SSH识别新的私钥,需要将其添加到SSH agent 使用命令:ssh-add ~/.ssh/id_rsa_me(后面的是自己取的名字)

如果报错:Could not open a connection to your authentication agent.无法连接到ssh agent 可执行ssh-agent bash命令后再执行ssh-add

然后将公钥添加到git账号中 github.com/settings/ke…

Ⅴ- 配置config文件

查看.ssh文件中是否存在config文件

如果已存在则直接编辑config文件,命令:vim config #这是linux的命令,进入了vim界面后按a或i或A或I进入编辑模式,编辑完成后按esc键输入:wq 保存文件退出

如果不存在则需要创建config文件,命令:touch config,再对config文件进行编辑

对config文件进行配置填写:

#Default 第一个账号(123456@xxxx.com)
​
Host gsgit
 HostName gitee.com
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/id_rsa_me
​
​
#second 第二个账号(38894403@xxxx.com)
​
Host mygit
  HostName gitee.com
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/id_rsa

其中Host 后的名字可以随意方便自己记忆,但HostName必须为github.com(或者其它git地址)。

Ⅵ- 测试是否配置成功

使用命令:

ssh -T git@zc

出现欢迎语则为配置成功。

注意:配置完成后,在连接Host不是github.com的github仓库时,远程库的地址要对应地做一些修改:

而并非原来的git@github.com

git clone git@gitee.com:hongjilin/cx.git
//改为
git clone git@mygit:hongjilin/cx.git

这样每次连接都会使用id_rsa_me与服务器进行连接。

配置至此,大功告成!

Ⅶ- 问题Mark

这个自己在平常多多注意总结哦。

其实碰到问题先不要着急,整理一下思路,很快就会想到解决办法的,加油!一步步来!