git入门

git的基本概念

初始化仓库

  • 进入项目文件夹下,使用git init 初始化git本地仓库
    • 此时目录下会有隐藏的.git文件夹

设置签名

形式

  • UserName
  • E-mail addr
    作用:用来标识不同的开发人员

辨析

  • 签名与登录远程仓库的账号没有关系

签名级别

  • 项目级别/仓库级别:仅在本地仓库范围有效
    • git config user.name UserName
    • git config user.email E-mail
    • 命令配置的数据保存在 ./.git/config
  • 系统用户级别: 当前操作系统的用户范围
    • git config --global user.name UserName
    • git config --global user.email E-mail
    • 命令配置的数据保存在 ~/.gitconfig
    • 实际操作显示: 系统级别的签名只有一个,后面的会覆盖前面的
  • 级别的优先级
    • 就近原则:项目级别 > 系统级别

跟踪文件

  1. git status
    查看当前仓库状态
    [外链图片转存失败(img-zYU6HyCO-1569309221459)(./gitstatus.png)]

  2. 创建文本文件 new.text

  3. git add new.text

    • 将文件放置到暂存区
  4. git rm-cached new.text

    • 将文件从暂存区移除
  5. git commit [-m comments] new.text

    • 将文件提交到仓库中

    • 若不加*-m*选项,则git会自动调用vim编辑器强制添加comments,这一步可以通过其他方式略过

  • git commit -a 可以直接提交所有改变到仓库中,跳过中间提交到暂存区这一步
  • 但是只有git add以后的文件才能被git所track,也就是说新文件必须要git add

查看历史版本

  • git log [–pretty=online]
  • git log [–oneline]
  • git reflog
    • 三个版本的显示方式及内容略有不同
    • git reflog中的HEAD@{num} 中的num表示从当前版本移动到此版本需要几步

前进或后退版本

  • git reset --hard [版本完整hash值/部分hash值]
    • ^ 异或符号
      • git reset --hard HEAD^
      • ^表示后退一个版本,几个^就代表后退几个版本,
      • 只能后退版本
    • ~ 波浪号
      • git reset --hard HEAD~num
      • num是多少,就代表后退多少步
      • 只能后退
    • git reset的参数:
      • –soft 只移动本地库的指针
      • –mixed 移动本地库指针,重置暂存区
      • –hard 移动本地库指针,重置暂存区,重置工作区
      • tips: 重置就是恢复到该版本的状态

恢复被完全 删除的文件

  • 恢复文件需要文件已经至少被提交过一次
  • 回到该文件存在的版本

查看本地库与工作区的差异

  • git diff [版本] new.text
    • 查看本地库版本与工作区之间的差异,默认当前版本
    • 不加文件名则显示当前所有的差异

其他命令

  • git restore new.text
    • 在new.text文件被git跟踪以后,此命令可以撤销文件的修改,让文件恢复到上一次提交的状态

tips

  • 红色的文件代表未被track或者修改了未被提交到暂存区
  • 绿色的文件代表已经git add 但是还未被commit
  • 具体的状态,git status会有明确的提示
  • HEAD是一个指针,指向当前工作区的版本

分支

查看分支

  • git branch

创建分支

  • git branch name

切换分支

  • git checkout branchName

合并分支

  • 步骤
  1. 切换到接受合并的分支上
  2. git merge branch_name
  • 例子
  1. 现在有分支A完成了开发,需要合并到master
  2. 切换到master分支
  3. 执行git merge A

冲突解决

  • 合并两个分支时,同一个文件的相同位置同时被更改时,将发生冲突

    • 发生冲突时,git将在合并的文件中以特殊的字符标识冲突的部分
    <<<<< HEAD
    code1 这部分属于当前分支的内容
    ===== 
    code2 这部分属于被合并分支的内容
    >>>>> branchName
    
  • 解决冲突时将特殊字符删掉,并根据实际情况对代码做合并(任意编辑器)

  • 使用 git add fileName 标记文件的冲突已经解决

  • 使用 git commit [-m ‘msg’] 提交,冲突解决,此时不能添加文件名

常用分支

  • master

  • hotfix

  • release

  • develop

  • feature_1

  • feature_2
    .
    .
    .

  • feature_n

远程仓库

推送到远程仓库步骤

  1. 在代码托管网站上创建好仓库
  2. 本地创建好git项目
  3. 设置远程仓库地址
  • git remote add origin addr/file.git
  • 这里的origin代表远端名,并非是关键字
  1. 将分支推送到远端
  • git push origin branchName
  • 此时会要求输入用户名和密码

提交本地代码

  • git push origin branchName
    • 在提交前需要先执行git pull 操作
    • 如果不进行pull,发生冲突时,会提交失败
    • 需要先处理冲突在提交

从已存在的仓库中clone项目到本地

  • git clone addr
    • addr从远程仓库处获得
    • 完整的下载远程库到本地
    • 创建远程仓库的别名
    • 初始化本地库

从远端拉取变更

  • git pull origin branchName
    • fetch 只从远端拉取变更,不更新本地文件
      • 可以切换到origin/branchName中查看
      • 或者在FETCH_HEAD分支中查看
    • merge 将通过从fetch获取的变更更新到本地文件,当前工作区所处分支
      • git merge origin/branchName(保存fetch获取的变更的分支)
    • pull = merge + fetch

tips

  • git remote -v
    • 查看远程仓库地址
  • 配置的远程仓库信息保存在./git/config文件中

跨团队协作

fork操作

  1. 某个人不属于当前团队,但要对项目作出修改
  2. 其他人进入当前项目的主页,点击fork
  3. 然后其他人将代码clone到本地
  4. 正常修改、提交、上传
  5. 提交后其他人在自己的仓库里创建pull request
  6. 按着网页提示来就行
  7. 当前团队的负责人审核request,选择操作

SSH免密登录

步骤

本地操作

  1. 进入当前用户的家目录
  2. 执行 ssh-keygen -t rsa -C yourEMail
    • 此操作前删除.ssh文件夹
  3. 家目录下会生成.ssh文件夹,进入文件夹
  4. 复制id_rsa.pub文件中的文本
  5. 设置SSH登录的origin
    • git remote add origin_ssh SSH_ADDR
  6. push时选择origin_ssh分支

远程仓库操作

  1. 登录远程仓库,通过获得文本设置SSH keys
  2. 选择Clone with SSH,复制链接

git文件管理机制

  • 内部通过哈希算法来确定文件是否改变

分支领先 [1]

# 位于分支 master
# 您的分支领先 'origin/master' 共 1 个提交。
# (使用 "git push" 来发布您的本地提交)
无文件要提交,干净的工作区

解决:

  1. 查看分支 git branch
  2. git reset origin/master
  3. 重新拉最新代码 git pull

参考:

[1] git status查看状态出现分支领先@亚哈吧

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值