git的学习笔记(一):git本地操作

1.创建ssh key

ssh-keygen -t rsa -C "your_email@example.com"

执行命令后会在用户的家目录生成.ssh的隐藏文件夹,文件夹里有公钥id_rsa.pub和私钥id_rsa

2.登录github网站,在用户的settting页面,添加ssh key,把刚才生成的私钥内容粘贴到key文本中.

在gitlab或者gitee网站添加密钥的方式与github添加密钥的方式相同

3.远程仓库的管理

git remote add github <remote URL>	                            使用https方式将本地仓库关联到远程仓库(远程仓库名默认为origin)
git remote add github git@github.com:用户名/repo_name.git 使用git方式将本地仓库关联到远程仓库
git remote remove github 删除关联到本地的远程仓库,origin是远程库的名字
git branch --set-upstream-to=origin/smart smart 将分支smart设置为跟踪来自origin的远程分支smart
git push 把本地的所有提交推送到默认的远程的仓库
git push github -all
git pull github master 将远程origin代码拉到本地master分支
git push github master 将本地master分支代码推送到远端仓库
git clone <HTTP URLs/remote URL> 复制远程项目到本地

4.本地文件与远程仓库文件不同,不相关时的合并

先切换到需要合并的分支,例如:本地master分支

git checkout master

合并本地分支和远程分支

# 把本地分支和远程仓库的master这两个不相关,独立的分支合并
git merge --allow-unrelated-histories github/master

在弹出的窗口中修改内容并退出,即为commit的内容

5.不同人修改了不同文件处理方式

不同的人修改了同一个项目的不同文件,且都已经提交到过程仓库时

首先用户A把远程仓库的分支拉取到本地仓库

git fetch github
git branch -av # 查看本地仓库和远程仓库的所有分支信息

在这个时间段内,另一个用户B又在他的分支做修改并提交到远程仓库后,用户A使用 git push github 命令同步本地修改到远程仓库会提示异常

用户A的解决方法:

git fetch github                 # 拉取远程仓库的分支信息
git merge github/用户B的分支 # 把用户B的分支与本地分支进行合并
git push github # 推送到远程仓库

6.不同人修改了同一个文件的不同区域处理方式

用户A修改某个文件,提交并同步到远程仓库

用户B也修改这个文件,然后commit,在同步到远程仓库时会报错

用户B解决方法:

git fetch
git merge origin/用户A的远程分支 # 用户A修改后提交到哪个分支,就合并哪个分支
git push # 用户B同步分支到远程仓库的指定分支

7.不同人修改了同一个文件的同一区域处理方式

用户A修改某个文件的某一行,提交并同步到远程仓库

用户B也修改这个文件的同一行,然后commit,在同步到远程仓库时会报错

用户B的解决方法:

git pull                # 把远程仓库的用户A的修改拉取到本地并合并,会提示 conflict
修改冲突文件,解决冲突
git commit -m "commit message" # 提交修改
git push github # 同步到远程仓库

8.多人协作,同时变更了文件名和文件内容时处理方式

用户A修改文件名,提交并同步到远程仓库

用户B也修改这个文件的内容,然后commit,在同步到远程仓库时会报错

用户B的解决方法:

git pull                # 把远程仓库的用户A的修改拉取到本地并合并,会提示修改合并后的提交信息
git push github # 同步到远程仓库

git会自动把用户B的文件名修改成用户A修改后的文件名

9.多人协作,把同一文件修改成两个不同的文件名时的处理方式

用户A修改文件名,提交并同步到远程仓库

用户B也修改这个文件的文件名,然后commit,在同步到远程仓库时会报错

用户B的解决方法:

git pull                # 把远程仓库的用户A的修改拉取到本地并合并,并同时显示两个内容相同但文件名不同的文件
git diff file1 file2
git status
git rm file # 这里的file为没有被修改之前的文件名
git add file1 # 把 file1 添加到暂存区
git rm file2 # 删除 file1
git commit -m "commit message"
git push

10.禁止向集成分支执行 push

多人协作开发时,禁止使用的命令,会造成以前提交的信息丢失

git push -f             # 强制 push

11.同一台电脑添加多个git密钥

参考gitee网站:Git配置多个SSH-Key

11.1 生成多个网站的公钥和私钥

ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/gitee_id_rsa
ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/github_id_rsa
ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/gitlab_id_rsa

11.2 在~/.ssh 目录下新建一个config文件

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa # github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa # gitlab
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_id_rsa

11.3 用ssh命令分别测试

Administrator@DESKTOP-B5TMUVT MINGW64 ~/.ssh
$ ssh -T git@gitee.com
Warning: Permanently added the ECDSA host key for IP address '120.55.226.24' tothe list of known hosts.
Hi SING890925! You've successfully authenticated, but GITEE.COM does not provide shell access. Administrator@DESKTOP-B5TMUVT MINGW64 ~/.ssh
$ ssh -T git@github.com
The authenticity of host 'github.com (13.229.188.59)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.229.188.59' (RSA) to the list of known hosts.
Hi renpingsheng! You've successfully authenticated, but GitHub does not provideshell access. Administrator@DESKTOP-B5TMUVT MINGW64 ~/.ssh
$ ssh -T git@gitlab.com
The authenticity of host 'gitlab.com (35.231.145.151)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab.com,35.231.145.151' (ECDSA) to the list of known hosts.
Welcome to GitLab, @renpingsheng!

如下图所示

12.打开浏览器查看git帮助文档

git help --web log      # 打开浏览器查看git log帮助文档

git的学习笔记(二):git远程操作的更多相关文章

  1. 代码管理工具 --- git的学习笔记二《git的工作原理》

    通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...

  2. git的学习笔记(一):git本地操作

    1.Git介绍 Git是一个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理. Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发. Git ...

  3. python学习笔记(二)、字符串操作

    该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...

  4. Git 笔记二-Git安装与初始配置

    git 笔记二-Git安装与初始配置 Git的安装 由于我日常生活和工作基本上都是在Windows上,因此此处只说windows上的安装.Windows上的安装和其他程序一样,只需要到http://g ...

  5. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  6. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  7. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  8. Windows phone 8 学习笔记(2) 数据文件操作

    原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...

  9. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

随机推荐

  1. 说一说js中__proto__和prototype以及原型继承的那些事

    在面试中遇到过,问js如何实现继承,其实最好的方式就是构造函数+原型,今天在讨论中,发现自己以前理解上的一些误区,特地写出来,最近都比较忙,等手上的项目做完,可以来做个总结. 先说我以前没有认识到位的 ...

  2. Javascript 进阶 面向对象编程 继承的一个例子

    Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承,这篇使用一个例子来展示js如何面向对象编程,以及如何基于类实现继承. 1. ...

  3. Netty 学习 一、初识Netty【原创】

    在过去几年的工作和学习中,比较关注高层次的应用开发,对底层探究较少.实现Web应用的开发,主要依赖Tomcat.Apache等应用服务器,程序员无需了解底层协议,但同样限制了应用的性能和效率.现在开始 ...

  4. 「SDOI2018」物理实验

    题目大意: 这题不好描述,直接看原题吧…… 题解: 很无脑的题……就是卡精度+难写.代码能力还是太差了. 其实可以直接用long double肝过去.但我的代码似乎太丑了,以至于跑得奇慢无比. 代码: ...

  5. 一种非常巧妙的读取串口数据的方法--C#

    读取不完就一直等待,读完了就立刻走,之前都是设置一个溢出时间,不管是不是早就读取完了都要在这等着,有一定的时间浪费. 注意,用之前要设置好SerialPort类的TimeOut属性:

  6. linux服务器 jboss-7安装

    jBoss简介 JBoss是一个运行EJB的J2EE应用服务器.它是开放源代码的项目,遵循最新的J2EE规范.从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操 ...

  7. Linux文件属性及权限

    一.Linux文件属性: 例如: drwxr-xr-x 2 hdy hdy 4096 11月 28 00:18 桌面 drwxr-xr-x 2 hdy hdy 4096 11月 28 00:18 桌面 ...

  8. happyChat开发系列:使用websocket.io实现双向通信的乐聊大前端开发

    一.前言 乐聊是一个自己用websocket写一个完整的应用,虽然功能比较欠缺,但是实现了基本的文字聊天,以及群聊,私聊,机器人聊天等功能.因为这个自己做了PC端,无线端(手机端),以及使用cordo ...

  9. python中线程和进程(二)

    目录 线程同步 Event Lock RLock Condition Barrier semaphore GIL 线程同步 线程同步,即线程之间协同工作,一个线程访问某些数据时,其他线程不能访问这些数 ...

  10. 深度解密Go语言之关于 interface 的10个问题

    目录 1. Go 语言与鸭子类型的关系 2. 值接收者和指针接收者的区别 方法 值接收者和指针接收者 两者分别在何时使用 3. iface 和 eface 的区别是什么 4. 接口的动态类型和动态值 ...