Git常用指令

Git版本控制精要
本文详细介绍了Git的基本操作,包括查看文件变化、提交日志、版本回退、文件撤销、分支管理、解决冲突、标签管理和命令简写。通过实例演示如何高效地进行版本控制和团队协作。

前述

版本管理

  • 查看文件变化git diff README.md

  • 提交日志git log

    git log
    commit 9fdc041e35d50cb4d2d0776cdbbb26e7e27d8c28
    Author: alex <alex_my@126.com>
    Date:   Fri Oct 26 17:55:07 2018 +0800
    
        修改菜单前缀和前缀值
    
    commit 4fe2f7ec6c6c5d37b740c71c23170ddd7c462c4b
    Author: alex <alex_my@126.com>
    Date:   Fri Oct 26 17:22:15 2018 +0800
    
        菜单前缀和前缀值
    
    commit 8f9791beb1e5d44f02eaa79030b737e332e713a0
    Author: alex <alex_my@126.com>
    Date:   Fri Oct 26 17:02:04 2018 +0800
    
        dev
    
  • 如果日志信息太多麻烦可以用git log --pretty=oneline

    9fdc041e35d50cb4d2d0776cdbbb26e7e27d8c28 修改菜单前缀和前缀值
    4fe2f7ec6c6c5d37b740c71c23170ddd7c462c4b 菜单前缀和前缀值
    8f9791beb1e5d44f02eaa79030b737e332e713a0 dev
    0d2b0f1d35d7a48affe813568ee17e0b6454292e 制定计划
    
  • 操作记录git reflog

    ae32f2a (HEAD -> dev, origin/dev) HEAD@{0}: reset: moving to HEAD^
    449fe7d HEAD@{1}: commit: dev
    ae32f2a (HEAD -> dev, origin/dev) HEAD@{2}: commit: dev
    
  • 版本回退git reset

    • 当前版本是HEAD,上一个版本是HEAD^,上上版本是HEAD^^,数量多的时候,比如第一百个版本也可以写为HEAD~100
    • 通过git reflog | log可以知道commit id,执行git reset {commit id}回退到指定版本
  • 文件撤销git checkout --file

    • 让指定文件回到最近一次git commitgit add时的状态

分支管理

  • 创建分支git branch

    • 比如新建用于开发的分支,而master做为稳定分支,git branch dev
  • 切换分支git checkout

    • 切换为dev分支git branch dev
    • 切换为master分支git branch master
  • 合并分支git merge

    • 该命令为合并指定分支到当前分支
    • 先切换到master分支,git checkout master
    • 合并dev到当前分支,git merge dev
    • 本次合并,会有一个提示Fast-forward,即把master的指针指向了dev,但并不是每次合并都能Fast-forward,特别是多人开发有很多分支的时候,后文会讲到
    • Fast-forward合并方式看不出曾经做过合并,因此要带参数--no-ff,这样普通模式的合并可以使用git log查看到合并记录
  • 删除分支git branch -d

    • 加入某一分支是为了解决某一问题而创建的,那么修复之后就可以删除该分支了
    • 删除dev分支,git branch -d dev
    • 如果dev分支没有合并,会删除失败,并被通知该分支还没有全部合并,不可以删除
    • 可以使用git branch -D dev来强制删除该分支
  • 解决冲突

    • 如果两个分支同时修改了一个文件的同一个地方,那么,合并分支的就是就会产生冲突,需要修复冲突之后再提交

    • 可以使用git status查看冲突的文件

    • 打开文件有类似以下的内容

      <<<<<<< HEAD
      {master 分支修改的内容}
      =======
      {dev 分支修改的内容}
      >>>>>>> dev
      
    • 和同事确认之后,修改为以下内容,并提交

      {dev 分支修改的内容}
      
    • 强势删除他人提交的内容会让你成为不受欢迎的人

    • git log命令也可以看到分支的合并情况

  • BUG分支

    • 当我们正在dev上做开发,但这个时候有一个紧急修复的bug,而这个时候dev工作还未完成,我们需要从一个clean的分支上创建新的分支,一种方式是从稳定的master分支上创建新分支,另一种就是用git stash命令将dev尚未提交的内容存储到别的地方,造成一个工作区域clean的假象

    • 如果是从master分支创建出来的,那么只要合并回去就好,但这个时候masterdev分支就有点麻烦了,可能会造成合并冲突

    • 如果是从dev分支创建出来的,我们需要把之前存储到别的地方的内容还原回来

    • 首先可以使用git stash list查看存储的内容

      stash@{0}: WIP on dev: f52c633 add merge
      
    • 然后有两种方法恢复内容,一个是先用git stash apply恢复工作区域,但还要用git stash drop来删除stash存储的内容。另一种方式就是用git stash pop,恢复的同时也把存储的内容删除了

    • 如果有多次的stash,用git stash lis查看之后,也可以恢复指定的stash

      git stash apply stash@{0}
      
  • 分支策略

    • master做为稳定版本,一般不直接用于开发,习惯上新建dev分支,大家从dev分支上拉取版本,开发完成后推送给dev
    • 当发现问题的时候,比如提了一个issueid54,那么我们可以创建一个分支issue-54用于修复该问题,合并分之后删除分支issue-54
    • 当有新特性要开发的时候,可以新建特性分支,比如feature-md分支,加入对Markdown的支持,完成之后再删除该分支

标签管理

  • 我们可以在某个正式版本发布的时候打一个标签,比如v1.0v1.2,这样以后有需要的之后可以直接取出该版本,如果是直接从master分支取出,则需要知道commit id,这是一个hash值,一长串字母和数字,没有版本号那么只管方便
  • 创建标签
    • 一般我们选择在稳定的master打新标签
    • 使用git tag v1.0创建了名为v1.0的标签
    • 如果我们想对历史上的某个commit id分支打标签,可以先执行git log --pretty=oneline --abbrev-commit找到commit id,然后执行git tag v0.9 {commit id}打新标签
  • 查看标签git tag
    • 标签是不是按照打标签的先后顺序列出的,而是按照字母顺序排列的
  • 查看详情git show
    • git show v1.0
  • 取出标签版本git checkout
    • 取出v1.0版本: git checkout v1.0
  • 推送标签
    • 标签只存储在本地,不会自动推送到远程
    • 推送某个标签: git push origin v1.0
    • 推送所有尚未推送到远程的标签: git push origin --tags
  • 删除标签
    • 删除只存在本地的标签: git tag -d v1.0
    • 删除在远程存在的标签: 先删除本地标签,再删除远程标签git push origin :refs/tags/v1.0

命令简写

  • 可以自行编写简写命令

    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.br branch
    git config --global alias.st status
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    
    • 加上--global对当前用户有效,否则只对当前仓库有效
  • https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)

### Git 常用指令汇总 以下是基于提供的参考资料以及专业知识整理的 Git 常用命令列表: #### 初始化与配置 - **初始化仓库**: 使用 `git init` 可以在一个工作目录中初始化一个新的 Git 仓库[^1]。 - **全局用户名和邮箱设置**: ```bash git config --global user.name "Your Name" git config --global user.email "your_email@example.com" ``` #### 添加文件到暂存区 - 将单个文件添加到暂存区: ```bash git add filename ``` - 将多个文件添加到暂存区: ```bash git add *.extension ``` - 将所有更改的文件一次性添加到暂存区: ```bash git add . ``` #### 提交更改 - 提交暂存区中的更改并附带提交信息: ```bash git commit -m "commit message" ``` - 如果有已跟踪文件被修改过,则可以跳过暂存直接提交: ```bash git commit -am "commit message" ``` #### 查看状态与日志 - 查看当前工作树的状态,包括哪些文件已被修改但尚未提交: ```bash git status ``` - 显示所有的提交记录及其元数据: ```bash git log ``` - 更简洁的日志显示方式: ```bash git log --oneline ``` #### 分支管理 - 列出所有分支: ```bash git branch ``` - 创建新分支: ```bash git branch new_branch_name ``` - 切换至另一个分支: ```bash git checkout existing_branch_name ``` - 合并某个分支到当前分支: ```bash git merge source_branch_name ``` #### 远程操作 - 查看远程仓库的信息: ```bash git remote -v ``` - 添加一个新的远程仓库: ```bash git remote add shortname url ``` - 获取最新的远程分支更新: ```bash git fetch origin ``` - 将本地提交推送到远程仓库: ```bash git push origin master ``` #### 标签管理 - 查看已有标签: ```bash git tag ``` - 创建轻量级标签: ```bash git tag v1.0 ``` - 创建带有注解的标签: ```bash git tag -a v1.0 -m "Version 1 release" commit_hash ``` - 推送标签到远程仓库: ```bash git push origin v1.0 ``` - 删除本地标签: ```bash git tag -d v1.0 ``` - 删除远程标签: ```bash git push origin :refs/tags/v1.0 ``` #### 撤销操作 - 撤销最后一次提交但仍保留代码改动: ```bash git reset HEAD~1 ``` - 撤销某一次特定提交的历史记录而不影响后续提交: ```bash git revert commit_id ``` - 若想重置整个项目回到某一历史节点(危险操作),可使用硬重置: ```bash git reset --hard commit_id ``` #### 其他实用技巧 - 当前未保存的工作进度可以通过 stash 功能临时存储起来以便切换上下文环境: ```bash git stash save "message" git stash pop # 应用最新stash并移除它 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值