• 【Git】常见工作场景


    前言

    之前做项目都是一个人做,最近和一个哥们一起做了一个项目,学到了一些Git常见的使用场景,在此记录下来。

    查看历史提交

    场景是这样的。有两个提交A和B,B是历史提交,A是当前提交。我使用git checkout 切到B历史提交,然后又切换回A,再修改代码并commit、push的时候,发现报了错:detached HEAD。这个是由于我切到了一个不存在分支的commit上,导致进入了git detached HEAD state。

    解决方案:

    • 如果想保留这些改动,再历史commitB上再新建一个分支即可
    • 如果不保留,直接切到之前的分支。注意是切到分支,不是切到commit,这两者是不一样的

    详见【Git】HEAD detached from xxx 问题及解决方案

    丢弃已添加到暂存区的改动

    即撤销git add的修改,使用git reset --hard即可。

    撤销commit

    有时候有些代码还没完全测完,或者有注释没写之类的情况,就直接commit了,但还没有push到远程仓库。我想要撤销,完善一下重新提交这个commit,这个时候可以用git reset --soft HEAD~1命令撤销到上一次提交。这里约定最新提交称为“当前提交”,最新提交之前的一次提交称为“上一次提交”,则:

    • --soft表示保留当前提交的改动,即将当前提交由本地库(git commit后的位置)退回到暂存区(git add后的位置)。--hard表示不保留,直接丢弃
    • HEAD~1表示撤销到上一次提交

    暂存改动

    我当前在我的开发分支上写一个功能,还没写完,别人提了一个pr,需要先合到主分支上,然后合到我的开发分支上。这时,我就得先暂存我的改动,不然是不能checkout到主分支的。那git也提供了git stash命令,用于暂存当前的改动。再执行完合并操作后,再利用git stash pop命令将改动恢复,就可以继续完成功能的实现了。当然,也可以用git stash list查看暂存的所有改动。

    同步远程改动

    有时候会在分支里看到这种信息:

    On branch main
    Your branch is behind 'origin/main' by 3 commits, and can be fast-forwarded.
      (use "git pull" to update your local branch)
    
    • 1
    • 2
    • 3

    这个意思就是本地库比远程库落后了3个分支,建议用git pull同步一下远程的改动。这通常是因为其他人已经推送了更改到远程仓库。

    多人合作

    这里我主要介绍我在做项目的时候用到的合作流程:

    1. 仓库每个人(包括仓库作者)都是先将库拉到本地,并用git checkout -b new_branch 创建一个开发分支,后续在开发分支上开发
    2. 进行开发
    3. 将改动推到远程开发分支
    4. 在远程仓库创建pr合并到主分支
    5. 由仓库的作者来进行code review以及merge操作

    常用Git命令

    这里列举常用的git命令:

    命令含义
    git add将改动由工作区添加到暂存区
    git commit将改动由暂存区提交到本地库(一个提交可以看成代码的一个版本)
    git push将本地库推到远程仓库
    git pull将远程库的更新到本地
    git checkout切换到某一次commit,或者某一个分支(分支其实指向的就是某一次commit)
    git branch查看当前所在分支
    git merge other_branch将other_branch的改动合并到当前分支
    git reset --soft HEAD~1将当前提交由本地库退回到暂存区
    git reset --hard丢弃git add的改动
    git stash暂存暂存区的改动
    git stash pop弹出暂存区的改动
    git stash list列举所有暂存的改动
  • 相关阅读:
    【业务功能116】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere-公共服务 DNS
    打印数组的所有子集
    一文搞懂什么是DSMM,干货!!!
    Ubuntu/Linux 配置 vlan
    java封装,继承,多态
    前缀树的设计与实现
    Cadence OrCAD Capture 全局修改TitleBlock信息
    springboot面试杀手锏-自动配置原理
    C语言练习百题之#ifdef和#ifndef的应用
    ui界面的介绍
  • 原文地址:https://blog.csdn.net/destiny_balabala/article/details/134173160