git 操作汇总

81 阅读3分钟

写在前面

软件多人开发,难免遇到版本控制问题。小项目开发时,使用三板斧可以

git pull
git add .
git commit -m "message"
git push origin master

遇到大点的项目,处理冲突、代码丢失分分钟让人头秃。我就是在一次提交中误使用了git stash,代码丢失,找回来的过程也是一言难尽。

于是,我决定重新整理一下git操作,方便后续控制版本。

基本原则

代码写好后,任何git操作前,先进行三部曲: git status -> git add . -> git commit

命令分析

git status

在说文件状态之前,先了解一下git的流程。如下图所示, git中有三个区:

  • 工作区Working Tree:就是你写代码的目录区
  • 暂存区Index/Cache: git add 后的文件所在区
  • 本地仓库Repository: git commit 后的文件所在区

根据操作不同,使用git版本控制的文件主要有3种状态:

  1. untracked files:本地新新增的文件,只存在工作区中;
  2. changes to be commited: git add 后,工作区和暂存区中都有,提示你去commit;
  3. changed not stated for commit:git add 后,但是在本地又做了修改或删除,但是没有commit。

git log && git log --oneline

超高频操作。查看当前分支的提交历史(commit)。配上不同的参数可以过滤不同的结果。

最常用的是--oneline参数,log历史会一行显示。

git add && git commit

超高频操作,这2步就是把工作区的文件保存到本地仓库中,commit过的代码不会意外丢失。

git stash

将当前的工作区内容保存到Git栈中,此时工作区中没有文件了。这个操作使用需谨慎,容易发生丢失。

git rebase

把一个分支的修改合并到当前分支。

常规情景

刚接收到任务

  1. git clone: 从远端仓库拉取代码

  2. git checkout -b new-branch: 创建一个新分支(这里假设新分支的名字是new-branch)

  3. 写代码

  4. git add . && git commit -m "xxx": 每当写完一个模块或功能后,记得保存到本地仓库,防丢失

  5. 代码开发完成了,

    5.1. git status: 查看所有代码是否都保存,如果没有继续git add && git commit

    5.2. git log --oneline: 查看当前分支下的commit信息

    5.3. git rebase: 合并commit信息

  6. git push origin new-branch: 把本地仓库推到远端

开发一半时,需要远端最新代码

  1. git status: 查看所有代码是否都保存,如果没有继续git add && git commit
  2. git pull --rebase origin master:将远端主分支master以rebase的形式合并到当前分支
  3. 继续写代码

开发一半时,需要其他分支的某个commit的代码

  1. git status: 查看所有代码是否都保存,如果没有继续git add && git commit
  2. git log --online other-branch: 查看所需分支的commit记录,记下需要commit的hash值hash-XXX
  3. git cherry-pick hash-XXX: 复制到当前分支

异常处理

应该在develop分支上开发,结果忘记切换分支,在master上开发了

  1. git stash save "save message": 先把代码临时保存到git栈中,此时工作区没有文件。
  2. git switch develop: 切换到目的分支
  3. git stash list: 查看栈中有过哪些临时存储
  4. git stash pop [stash@{1}]: 把文件从git栈中恢复,如果不加参考默认第一个