前言
多人协作的一般工作模式:
- 试图用
git push origin branch-name
推送自己的修改; - 如果推送失败,则因为远程分支比本地更新早,需要先用
git pull
试图合并; - 如果合并存在冲突,则需要解决冲突,并在本地提交,再用
git push origin branch-name
推送。
配置ssh公钥
1 在控制台输入:
git config --global user.name "用户名"
git config --global user.email "邮箱"
2 查看已配置信息:
git config --global --list
3 执行以下命令生成密钥:
ssh-keygen -t rsa -C "邮箱"
【注】此处输入邮箱是后面为不同账户配置public key的关键,如果仅有一个账户,输入ssh-keygen -t rsa
也可生成密钥。
中途需要进行3次或4次确认:
- 密钥的保存路径,不更改则直接回车
- 是否覆盖上一次生成的密钥(如果之前已经生成过)
- 设置密码
- 确认密码
建议路径使用默认配置,密码不设置,这样每次git push等操作都不需要输入密码,比较方便。若是使用默认路径,将在~/.ssh路径下得到两个文件:id_rsa和id_rsa.pub。
4 添加公钥
在终端输入:
cat ~/.ssh/id_rsa.pub
复制内容粘贴至:以gitee为例,点击右上角头像 --> 设置 --> 安全设置-ssh公钥 --> 添加。
5 测试连接
ssh -T git@gitee.com
在本地配置多个ssh公钥
【说明】例如需要为gitlab和gitee均配置ssh公钥,且不是同一个账户,如果按照上述方法配置,新配置的密钥将覆盖之前的,造成极大不便,下面的方法将解决该问题。参考
1 生成新的ssh公钥
ssh-keygen -t rsa -C "邮箱"
【注】不要一路回车,修改id_rsa的名字,如修改为id_rsa_gitee(见红色框部分),之后将新生成的密钥复制进对应的位置。
2 配置config文件
完成上面的步骤后,文件夹目录如下:
此时仍然无法正常进行clone等操作。
git push -u origin master
git@gitee.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
需要对config文件进行配置:
vim config
#如果没有这个文件直接新建即可
在config文件中添加如下内容:
Host gitee.com
HostName gitee.com
IdentityFile "之前生成的id_rsa_gitee的绝对路径,即上面红框的部分"
保存退出,配置完成!
push操作流程
在要进行push操作的本地文件夹下右键“Git Bash Here”。
git init # 初始化仓库
git remote add origin "远程仓库地址,https或者ssh都可以"
# 如果需要切换分支,则执行下面一条命令进行分支切换
git checkout -b "要切换的分支名"
git add . # 提交当前文件夹的所有文件到缓存区,也可以指定文件名
git commit -m "关于本次push的一些说明"
git pull origin "分支名"
git push -u origin "分支名"
问题整理
1 Git bash here报错找不到应用程序
2 pull & clone的区别
git clone是把整个git项目拷贝下来,包括里面的日志信息,git项目里的分支,你也可以直接切换、使用里面的分支等等。git pull相当于git fetch和git merge,其意思是先从远程下载git项目里的文件,然后将文件与本地的分支进行merge。
3 报错 Updates were rejected because the remote contains work that you do
原因在于本地库与远程仓库的内容不一致(远程仓库有一些内容本地没有),造成该问题的原因一般为push之前没有进行pull操作。
4 报错fatal: refusing to merge unrelated histories
执行如下命令即可:
git pull origin "报错提示的分支名" --allow-unrelated-histories