git 备忘录

git 是一个版本控制工具,最大的作用当然是版本的记录,以及实现多分支并行开发
参考 官方文档 他人博客

1. git操作流程

2. git常用命令

  • 2.1 checkout 用于切换分支,更新文件
# 从当前分支,当前位置(或者指定revision_num位置),新建一个分支,并切换到该分支
$ git checkout -b [branch] [revision_num]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 将仓库最新的提交的代码,覆盖掉本地
$ git checkout .

# 删除本地分支
$ git branch -d [branch-name]
  • 2.2 branch 分支的相关操作
# 列出所有本地分支
$ git branch
 
# 列出所有远程分支
$ git branch -r
 
# 列出所有本地分支和远程分支
$ git branch -a
  • 2.3 add 将修改文件加入到工作区中
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
 
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
 
# 添加当前目录的所有文件到暂存区
$ git add .
  • 2.4 commit 提交工作区的修改文件
# 提交暂存区到仓库区
$ git commit -m [message]
 
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
  • 2.4 push 推送仓库区的所有提交文件到远程仓库
# 上传本地指定分支到远程仓库
$ git push [remote] [branch]

  • 2.5 merge 合并指定分支到当前分支
# 先切换到需要被合并的分支,如master
$ git checkout master

# 合并操作,一般最好添加--no-ff 参数, 这样就会单独生成一个合并的版本点,易于通过分支图分析查看
$ git merge --no-ff develop
  • 2.6 rebase 将分叉捋顺
#  将当前没有提交的分叉,rebase到最新提交的版本之后
$ git rebase [<upstream>]  <branch>
  • 2.7 cherry-pick 合并指定历史版本提交的代码
# 合并指定历史版本提交的代码,并提交。如果这个版本的代码依赖更早的未合并的代码,那么代码会出现在本地,但是不会commit;
$ git cherry-pick <commitId>
  • 2.8 tag 给指定版本打标签,一般适合版本发布,阶段里程碑等
# 创建一个标签
$ git tag [-m <msg>] <tagname> [<commitId>]

# 将创建的标签推送到远程仓库
$ git push [<upstream>]  <tagname>

# 列表查看标签
$ git tag -l

# 查看一个标签详情
$ git tag -v <tagname>

# 删除指定标签
$ git tag -d <tagname>

  • 2.9 stash 将工作空间,以及暂存区的修改还原成最新提交的版本,同时生成一个包含修改内容的stash
# 自动还原代码,同时创建一个stash
$ git stash save [<msg>]

# 查看stash列表
$ git stash list

# 将指定的stash的修改应用到当前分支, 并且移除stash记录
$ git stash pop [<stashId>]

# 将指定的stash的修改应用到当前分支,但是不会移除stash记录
$ git stash apply [<stashId>]

# 移除一个stash记录,如果不写stashId,那就回移除最新的stash记录
$ git stash drop [<stashId>]
  • 2.10 diff 查看不同版本,分支的代码区别
# 查看当前working area本地代码 和 上次提交到staging area的区别,有哪些被改动,以及改动了多少行
$ git diff --stat

# 查看当前working area本地代码 和 sit 分支 的staging area的区别
$ git diff sit
  • 2.11 log 查看git历史记录,以及分支走向
# 查看git分支图 
$ git log --pretty=oneline --graph --all -8

# 查看提交记录
$ git log --pretty=oneline

3. 修改的还原,以及版本回退

    commit后的版本回退会涉及到git reset [--soft | --mixed | --hard] 命令,--soft只会将repository(仓库区)的代码恢复到指定版本,workspace(工作区)和index(暂存区)的代码都不会变动; --mixed(默认)会将repository和index的代码恢复到指定版本,而workspace的代码不会变动; --hard会将repository,index,workspace的代码都恢复到指定版本。一般使用--hard就可以了。

  • 修改文件还没有被add的情况

# 3.1 恢复暂存区的指定文件到工作区
$ git checkout -- [file]
 
# 3.2 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
 
# 3.3 恢复暂存区的所有文件到工作区
$ git checkout .

  • 3.4 修改文件已经add,还没有commit的情况
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变,这里的HEAD表示最新的版本
# 重置之后,因为工作区还没有变,所以还需要进一步checkout,来进行还原
$ git reset --mixed HEAD [file]
$ git checkout -- [file]
 
# 3.5 重置暂存区与工作区,与上一次commit保持一致(相当于进行上面的两步操作)
$ git reset --hard
 

  • 3.6 修改文件已经commit,但是还没有push的情况
# 查看所有提交的记录,找到想要还原到的位置,并ctrl+m,移动光标复制id
$ git log --pretty=oneline

# 3.7 直接把工作区,暂存区,仓库区 都还原到 指定版本的位置(使用HEAD^表示上一个版本)
$ git reset --hard HEAD"^" 
  • 3.8 修改的文件已经push到远程仓库
# 查看提交的记录找到版本id,通过git revert 移除指定版本
$ git revert HEAD
  • 3.9 删除已经提交到远程仓库的文件,但是不希望删除本地的
# -r 表示递归(recursive)删除, --cached 表示会从stage,index中移除,但是工作区的文件不会受到影响
git rm -r --cached filePath
git commit -m "message"
git push
原文地址:https://www.cnblogs.com/IC1101/p/11236312.html