Git - 日常使用小结

前言

说来惭愧,关于版本控制工具,此前虽然用过SVN和Git,但都是局限于本地管理,所以并没有远程仓的概念…

远程环境这里使用 GayHub,其他提供远程Git存储库的服务平台其实也大同小异。

本地配置

  • Git 安装
  • 配置个人信息
    # <xxx> : 表示需要替换的内容
    git config --global user.name <name>
    git config --global user.email  <email>
    # ps: 使用config指令查看所有配置
    git config --list
    
  • 配置SSH Key
    # 检查是否存在SSH Key
    cd ~/.ssh && ls
    # 如果出现了 id_rsa.pub 那么直接跳过这一步
    
    #配置SSH Key
    ssh-keygen -t rsa -C <email>
    
  • 添加SSH Key 到 GayHub
    # 打印 id_rsa.pub
    cd ~/.ssh && cat id_rsa.pub
    # GayHUb 个人头像 --> Setting --> SSH and GPG keys --> New SSH key
    
  • 测试
    ssh -T git@github.com
    

Git基础概念

在这里插入图片描述

  • 工作区间:即我们的工程项目文件。
  • 缓存区:只能通过 git GUIgit shell 窗口显示,提交代码、解决冲突的中转站。
  • 本地仓库:只能在git shell 窗口显示,连接本地代码跟远程代码的枢纽,不能联网时本地代码可先提交至该处。
  • 远程仓库:保存我们代码的服务器。

基本操作

仓库获取

  • 从远程拉取
    # GayHub 上进入项目首页,点击Code,选择SSH方式(默认),复制项目地址
    git clone <URL>
    
  • 在本地创建仓库同步到远程仓
    # 本地仓库创建
    git init
    # 添加文件到版本管理器
    git add <file>
    # 重版本控制中移除文件
    git rm <file>
    # 文件重命名
    git mv <file> <newname>
    # 查看当前状态
    git status
    
    # 创建远程仓库后复制项目地址URL
    # 关联远程仓库
    git remote add <branch> <URL>
    
    # 推送到远程仓库
    git push -u origin master
    # ps: 远程仓库空时需要加 -u
    

拉取

# 下载远程代码并合并
git pull

提交

# 提交到暂存区
git commit
# 推送到远程仓库并合并
git push

分支管理

  • 克隆指定分支
    # <branch> 是分支名 <URL> 是仓库地址
    git clone -b <branch> <URL>
    
  • 切换分支(检出)
    git check <branch>
    
  • 更新主分支流到某分支

方法一
分别克隆两个分支的代码, Beyond Compare 比较并手动合并,再 commint、push
该方法在git分支图上不会留下合并记录,且手动合并的代码被认为是你提交的(可能突然背锅)
由于需要自己比较合并,一般只适用于修改量不大的时候

方法二
通过 SmartGit合并
例如: 分支dev合并至master

  1. 检出分支dev、master ( 保留至本地 )
  2. 保证本地dev、本地master代码与远程分支是一致的
  3. 当前分支切换至dev
  4. 选中master分支,右键选择合并

在这里插入图片描述

一般选择合并到工作树,检查验证完毕再提交

  1. 当遇到冲突时,需要解决冲突,常见的有:

    • 重命名文件合并冲突 需要通过 git rm/git add 解决
    • 增删文件可选择 右键->解决->采用我们的/采用他们的
      在这里插入图片描述
  2. 验证合并结果

  3. 合并提交

    • 压缩提交(将两个分支差异的修改合并为一次合并commit提交)
      在这里插入图片描述
    • 提交
      在这里插入图片描述

更新子模块

# 有时候项目依赖到其他子项目,需要我们下载子项目
git submodule init
git submodule update

查看修改

# 可以查看每个commit的改动细节
git log -p
# 查看简要统计
git log --stat
# 查看指定commit的指定文件改动细节
git show <commit> <file>

# 显示暂存区和上一条提交之间的不同,即如果执行commit的结果
git diff --staged
# 显示工作区和暂存区之间的不同,即如果所有文件都add的结果
git diff
# 显示工作目录和上一条提交之间的不同,即苏鸥文件都add 再commit的结果
git diff HEAD

提交了错误的commit

  • 修改commit
    # 将存在问题的文件改好
    # 添加到暂存区
    git add <file>
    # 提交修改
    git commit --amend
    
    • 回滚
    # git reset [--soft | --mixed | --hard] [HEAD]
    # 回退所有内容到上一个版本
    git reset HEAD^
    # 回退 hello.php 文件的版本到上一个版本
    git reset HEAD^ hello.php
    # 回退到指定版本
    git  reset  052e
    
    # 补充 HEAD 说明:
    # ^
    	# - HEAD 表示当前版本
    	# - HEAD^ 上一个版本
    	# - HEAD^^ 上上个版本
    	# - ...
    # ~
    	# - HEAD~0 表示当前版本
    	# - HEAD~1 上一个版本
    	# - ...
    
  • 再次提交提交 合并commint
    # 合并最近两次提交
    git rebase -i HEAD~2
    

注意rebase 在 git 中是一个非常有魅力的命令,使用得当会极大提高自己的工作效率;相反,如果乱用,会给团队中其他人带来麻烦。

多人协同开发常见问题

  • 提交代码推荐前摇
# 人物:同事A,同事B
# 初始远程仓:版本T
# 由于所有项目组成员都可以修改远程仓库的版本,所有很容易出现一下情况:
# 问题流程: 同事A、B都clone了远程仓版本T,修改后的版本我们记录为TA、TB。假设同事A 先提交,这时远程仓的变为TA了,同事B再提交代码时可能出现两个情况:
# 1. Git自动合并 
# 2.你们修改了同一个代码段,提交冲突
# 个人习惯:提交代码前先从远程仓同步代码最后再推送至远程仓
	git pull --rebase

在线学习网站

Learn Git Branching

参考鸣谢

git图解:代码区域总结

图解git原理与日常实用指南

深入讲解

这才是真正的Git——Git内部原理揭秘!

这才是真正的 Git——分支合并

这才是真正的Git——Git实用技巧

详解 Git 大文件存储(Git LFS)

图解4种git合并分支方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值