文章目录
-
- 前言
- [一、Git 和 Gitee 建立联系](#一、Git 和 Gitee 建立联系)
-
- [1.1 任意目录下,打开 git bash 命令行,输入以下命令生成公钥](#1.1 任意目录下,打开 git bash 命令行,输入以下命令生成公钥)
- [1.2 配置SSH公钥](#1.2 配置SSH公钥)
- [1.3 进行全局配置](#1.3 进行全局配置)
- 二、其它相关Git指令
-
- [2.1 常用指令](#2.1 常用指令)
- [2.2 指令操作可能出现的问题](#2.2 指令操作可能出现的问题)
- 三、补充
-
- [3.1 **为什么要先commit,然后pull,然后再push,我pull了,岂不是把自己改的代码都给覆盖掉了嘛,因为远程没有我改的代码,我pull,岂不是覆盖了我本地的改动好的地方了?那我还怎么push?**](#3.1 为什么要先commit,然后pull,然后再push,我pull了,岂不是把自己改的代码都给覆盖掉了嘛,因为远程没有我改的代码,我pull,岂不是覆盖了我本地的改动好的地方了?那我还怎么push?)
- [3.2 两个分支,A和B,A合并B和B合并A,有区别吗?](#3.2 两个分支,A和B,A合并B和B合并A,有区别吗?)
前言
上一篇文章讲了如何安装和使用git版本控制工具。
但说起版本控制,怎么少的了团队协作,如果下班啦不想带电脑晚上还想继续搞怎么办?
那就使用码云、github在线管理吧!
数字化管理平台
Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus
权限系统-商城
个人博客地址
一、Git 和 Gitee 建立联系
1.1 任意目录下,打开 git bash 命令行,输入以下命令生成公钥
ssh-keygen -t rsa -C 邮箱
回车出现 (y/n), 输入 y , 连续点击回车,即可生成,效果如下:
1.2 配置SSH公钥
-
打开目录 C:\Users\Dell\.ssh 目录,找到 id_rsa.pub 文件,使用记事本打开
注意:不同电脑,用户目录有所差异
-
返回到浏览器中找到刚刚云端仓库创建完成的 gitee 页面
右上角找到个人信息点开,找到 "设置" 并打开
3. 设置页面如下 -
找到左侧栏 "安全设置" 中的 "SSH公钥",点击后如下
生成公钥的官方指导步骤:https://gitee.com/help/articles/4191#article-header0
默认公钥数量为 0,在 "添加公钥" 栏目下,添加 "标题" 和 "公钥"
注:标题名字为自定义 公钥为刚刚用记事本打开的 "id_rsa.pub" 文件中的内容
粘贴完成后,点击确定。此时就会显示 " 您当前的SSH公钥数:1 "。
1.3 进行全局配置
输入以下指令
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
将纳入版本库的文件,提交到 gitee 远程仓库:
git remote add origin 你的仓库地址
git push -u origin master
此时,提交完成,打开浏览器,输入你的仓库地址 ,如: https://gitee.com/magnumhou/test.git 即可看到上传文件:
二、其它相关Git指令
2.1 常用指令
- 查看当前分支:git branch
- 查看包含远程分支在内的所有分支:git branch -a
- 创建分支:git branch
- 切换分支:git checkout
- 创建+切换分支:git checkout -b
- 推送本地分支到远程分支 (远程和本地分支需同名):git push origin :
- 如果本地分支未与远程分支建立关联,拉取远程代码需执行:git pull origin 也就是需标明拉去远程的具体分支名*
- 合并某分支到当前分支:git merge
- 删除本地分支:git branch -d
- 删除远程分支:git push origin : 或 git push origin --delete
- git clone 项目地址 下载或克隆别人的项目到本地
- git status 查看被修改的文件
- git diff 文件 查看指定文件修改的内容
- git reset --hard HEAD^ 回退到上一个版本
- git reset --hard HEAD^^ 回退到上上个版本
- git reset --hard HEAD^^...^^ 回退到上N个版本,当然这是比较麻烦的,可以使用以下简化
- git reset --hard HEAD~100 回退到上100个版本
- git reset --hard HEAD commit id 通过指定id回到未来某个版本,可以通过 git log 查看提交历史
2.2 指令操作可能出现的问题
git pull 将远程主机的最新内容拉下来后直接合并 可能会出现冲突
git pull origin master // 拉取主分支最新代码,手动解决冲突
pwd 查看当前目录所在的系统文件路径
三、补充
3.1 为什么要先commit,然后pull,然后再push,我pull了,岂不是把自己改的代码都给覆盖掉了嘛,因为远程没有我改的代码,我pull,岂不是覆盖了我本地的改动好的地方了?那我还怎么push?
这个先 commit 再 pull 再 push 的情况就是为了应对多人合并开发的情况:
- commit 是为了告诉 git 我这次提交改了哪些东西,不然你只是改了但是 git 不知道你改了,也就无从判断比较;
- pull是为了本地 commit 和远程commit 的对比记录,git 是按照文件的行数操作进行对比的,如果同时操作了某文件的同一行那么就会产生冲突,git 也会把这个冲突给标记出来,这个时候就需要先把和你冲突的那个人拉过来问问保留谁的代码,然后在 git add && git commit && git pull 这三连,再次 pull 一次是为了防止再你们协商的时候另一个人给又提交了一版东西,如果真发生了那流程重复一遍,通常没有冲突的时候就直接给你合并了,不会把你的代码给覆盖掉
- 出现代码覆盖或者丢失的情况:比如A B两人的代码pull 时候的版本都是1,A在本地提交了2,3并且推送到远程了,B 进行修改的时候没有commit 操作,他先自己写了东西,然后 git pull 这个时候 B 本地版本已经到3了,B 在本地版本3的时候改了 A 写过的代码,再进行了git commit && git push 那么在远程版本中就是4,而且 A 的代码被覆盖了,所以说所有人都要先 commit 再 pull,不然真的会覆盖代码的
3.2 两个分支,A和B,A合并B和B合并A,有区别吗?
两个互相合并的唯一区别就是 A->B 的时候 B 分支上会产生一个 merge_commit 的信息,这个时候 B 是合并状态而 A 未合并状态,如果现在没有发生任何改动执行 B->A 就直接切换过去了,连 merge_commit 都不会生成了