git使用

git和idea

git基础与实操

简介

  1. diff与patch

    • diff用于比较源文件和目标文件之间的差异
      • diff -u left.c right.c
    • diff的结果可以保存,patch用于反向操作,通过源文件求出目标文件或者通过目标文件转化成源文件
      • patch left.c diff.txt
      • path -R right.c diff.txt
  2. 集中式和分布式的区别

  1. 哪个更适合?
    • svn不适合
      • 跨地域的协同开发
      • 对代码的高质量追求和代码门禁
    • git不适合的领域
      • 并不适合word等二进制文档的版本控制,因为git无锁定和解锁模式,不能排他式修改,不能将读授权到目录级别
      • 解决方案,将版本库按照目录划分

git安装与配置

  1. linux下,乌班图,debian

    • sudo aptitude install git
    • sudo aptitude install git-doc git-svn git-email gitk
    • 其中git为必装的软件包
    • 剩下的有着不同的依赖,单独作为软件包发布
  2. 红帽,centos等

    • yum install git
    • yum install git-svn git-email gitk
  3. 从源码安装

    • 访问git官方网站,http://git.scm.com/ 下载源码包,如git-2.19.0.tar.gz,下面对此进行解压
      • tar -jxvf git-2.19.0.tar.bz2对应着不同的linux解压方法
      • cd git-2.19.0
    • 安装方法在INSTALL文件中,参照其中的指示,将git安装在/usr/local/bin中
      • make prefix=/usr/local all
      • sudo make prefix=/usr/local install
    • 安装git文档
      • make prefix=/usr/local doc info
      • sudo make prefix=/usr/local install-doc install-html install-info
  4. 命令补齐

    • 将git源码包中的命令补齐脚本复制到bash-completion目录中

      • cp contrib/completion/git-completion.bash /etc/bash_completion.d/
    • 重新加载自动补齐脚本,使在当前shell中生效

      • ./etc/bash_completion
    • 开启自动加载补齐脚本,在~/.bash_profile或者全局文件/etc/bashrc文件中添加内容

      • if [ -f /etc/bash_completion ]; then

        . /etc/bash_completion

        fi

git 基本命令

  1. git的三种工程区域

    1. 版本库(Repository)

      隐藏目录.git文件夹,这个文件夹中就是git的版本库,也可叫做本地仓库

    2. 工作区(Working Directory)

      日常工作的代码文件或者文档所在的文件夹

    3. 暂存区(stage)

      一般在.git/index中,也可把暂存区称之为索引

  2. git的三种文件状态

    1. 已提交(committed)

      该文件已经被保存在本地仓库中了

    2. 已修改(modified)

      修改了某个文件,但是还没有提交保存

    3. 已暂存(staged)

      把已经修改的文件放在下次提交要保存的清单中

  3. git常用命令

本地基本提交和推送

  1. 新建远端工程:右上角new project
    • private 私密性较高,通常给个人
    • internal可以给公司其他人使用
    • public 一般不推荐
    • 可选择是否自动添加readme.md文件
  2. windows下打开git bash,是一个在windows下模拟的linux交互器
  3. 在新建gitlab新项目之后,会有一个clone命令,复制即可

  1. 使用linux命令可以进入新建的工程目录下,使用ls看不到,因为有隐藏文件,如果用ls -a,就可以看到

  • 当然,这里的git为隐藏文件
  1. 写入一个readme文件:echo “readread” >> README.md

  2. 但是写进去的文件没有被git跟踪,可用命令git status

    很明显,这里的read.md属于未被tracked 的文件,也就是说并没有被commit。下面提示使用了git add来是git对文件进行跟踪

  3. 输入命令git add READ.md,可见已经被git tracked,但是根据提示,to be committed,证明到目前为止还是没有提交,只是让git对该文件进行了管理和跟踪

  1. git commit READ.md -m "first test"进行代码的提交,这里-m表示message,为了区分每一次提交,这里都会有一个特别的描述来表明这一次提交

  2. git branch可以查看目前有几个分支,带*号的为当前工作区

  3. commit 一定会有日志

    • 搭配命令git log --name-status

  4. 推送远端服务器git push origin master

    • 这个origin是什么,就是远端服务器的名称,可通过git remote查看

本地分支上开发与日志查看

  1. 对于多个文件想要进行commit,可通过git add .来一次性add所有文件或者文件夹,可通过git status实时查看
  2. git commit -am "new added file" -a 表示全部都commit,-m表示mesage,这样可以同时全部进行commit
  3. git commit --amend可对最近一次的提交进行修改,可以修改提交描述,但是新提交的是会有新的版本号
  4. 切换分支,git checkout -b linmu/test1,将当前的分支切到新的分支上去
  5. git log -1查看最近一条的日志

本地基本分支合并

  1. git branch -r可查看远端的分支数,git branch -a可查看所有的分支

  2. git merge 和 git rebase,参考git rebase 和 git merge 的区别 - 简书 (jianshu.com)

    • merge
      • git checkout feature git merge master或者git merge master feature
      • 自动创建新的commit,在feature的git上产生一个新的commit
      • 优点:记录了真实的commit情况,包括每个分支的详情
      • 缺点:每次merge会产生一个merge commit,会使得分支很杂乱
    • rebase本质是变基,也就是寻找公共祖先
      • git checkout feature git rebase master
      • 特点:合并之前的commit历史
      • 优点:得到更加简洁的项目历史,去掉了merge commit
      • 缺点:合并出现代码问题不容易定位,因为重写了历史
  3. git pull = git fetch+git merge

    • git fetch不进行merge,比较温和,只是把远端的拉到本地,后期可以使用git checkout feature

分支合并过程中的冲突处理

  1. git branch查看分支

  2. 冲突场景

    • 当进行merge的时候发生冲突

      • 我们对于两个不同分支,写入了不同的内容,在这种情况下依然进行merge。在文件中显示了冲突的场景,此时保留其中一个,并删除其他的即可。命令模式下dd可快速删除
    • 这里进行git status可以提示进行git add来标记已解决

    • 进行git commit -am “,”

  3. 补充命令

    1. git log可以获得几个哈希值,版本哈希值
    2. git diff commit哈希 哈希可以比较两个修改内容之间的提交差异

本地撤销操作

  1. gut reset --hard 哈希值,恢复到之前的状态,因为它没有询问,所以是非常危险的
  2. git checkout READ.md,工作区未提交的还原
  3. git reflog,可以查看使用git所用到的一些命令

代码平台

代码平台添加ssh公钥

  1. 登录平台后,选择一个仓库,在右上角进行克隆。使用ssh公钥和代码平台进行通信。

  2. 在gitlab的右上角的setting->左侧栏SSH keys->生成ssh keys

  3. 按照步骤,在自己本地生成ssh key,将生成的公钥复制到代码平台的ssh设置中。

创建组织和仓库

  1. 右上角new group,把相关性高的项目放到这个group中
  2. 左侧栏中的members可以添加成员,并设置这些成员的权限
  3. settings可以修改组名称
  4. new project可以新建仓库
  5. 复制clone命令,在文件夹中打开git bash,粘贴克隆命令,就可以将仓库下载到本地

fork仓库并创建merge request

  1. 通常不允许直接文件夹并且push,更推荐使用fork的方法

  2. 具体步骤

    1. 点击fork
    2. 选择namespace,一般选择个人,也即是自己
    3. 接下来fork会在自己的名下,创建同名的仓库
    4. 克隆到本地
  3. 在本地添加一些文件,并打开git bash

    1. git add .将全部文件添加
    2. git commit -am "new files"提交
    3. git push origin HEAD:masterpush到远端仓库
  4. 在个人仓库可以显示已经添加的文件

    1. 添加merge

    1. new merge request,选择原分支和目标分支
    2. 点击

在这里会出现各种commit的信息,包括区别,差异等等

​ 4. assignee可以指定代码的审视人

解决merge request冲突

  1. gitlab在线解决冲突,如图已经产生了冲突

    1. 点击解决冲突
    2. 可以选择使用我们的,还是别人的
    3. 冲突解决后,会产生一个新的commit
  2. 线下冲突解决

    1. 我们将一个文件删除,但是分支对这个文件进行了修改
    2. 方法:
      1.

    ISSUE

    指派issue可以分给某个人,用老跟踪项目

IDEA

快捷键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值