美文网首页
git 常用命令集

git 常用命令集

作者: cdz620 | 来源:发表于2020-03-04 09:40 被阅读0次

初始化

工程初始化

  • git init demo 会直接生成demo的目录
  • mkdir demo && cd demo && git init

已追踪文件提交修改

  1. git add -u update更新已经追踪的文件,到本地仓库,相当于git add trackedFile
  2. git commit -m "haha" 提交
  3. git push 将修改推送到服务器

新增文件提交修改

  • git add newFile
  • git add -A 添加所有已经追踪的文件的更改
  • git add -f .gitignore中存在也强行添加到暂存区
  • git add -p 可以对比work 和index 间的区别,提供给用户对比后再提交部分确定的更新
  • git commit -m "haha"

git reset 重置一般针对暂存区操作

git reset [--soft|--hard|--mixed] <commit_id>

  • hard修改的步骤如下:
  1. 替换master(refs/master 文件所指向的commit_id)
  2. 替换暂存区的内容
  3. 替换工作区的内容 (这一步比较危险,会覆盖工作区)
  • soft 只执行第一步操作
  • mixed 执行 1 和 2 的操作,默认是mixed
  • git reset 相当于git reset --mixed HEAD . 默认是操作所有的文件,相当于放弃暂存区的修改
  • git reset -- filename 将filename文件的改动撤出暂存区,相当于git add filename的逆操作,双减号只是区分commit_id 和 文件名
  • git reset HEAD filename 效果如同git reset -- filename
  • git reset HEAD^ == git reset --mixed HEAD^ 放弃上一次的git add 操作
  • git reset --hard HEAD^ 彻底放弃上一次的更改

删除暂存区的修改

  • git rm --cache file

删除文件

  • git rm file 该命令会删除工作区和暂存区的文件,提交后版本库的文件才会删除

移动文件

  • git mv haha.txt README

例子

  • git reset --hard HEAD^ 重置到上一个老的提交分支上,该命令会破坏工作区未提交的的改动,慎用,该操作无法通过git log找回,git log 上不会保存该记录
  • git reflog show master 可以查看到git reset --hard的修改
  • git reset --hard master@{2} 可以找回git reset --hard的修改,master@{2}通过git reflog show master 找到

git checkout 检出,一般针对工作区操作

主要的三种用法

  • git checkout [<commit_id>] [--] <paths> 从某个commit_id 提取某个文件到当前工作区
  • git checkout BranchName 切换分支名
  • git checkout -b NewBranch [<start_point>] 创建新分支

分离头指针状态

  • 正常情况下,HEAD 都指向分支引用的文件,如:refs/heads/master,但是如果执行git checkout <commit_id>就会导致HEAD指向特定的commit_id的情况,这种现象就叫做“detached HEAD”,解决办法:git chekout -b <NewBranchName>
  • 如果没有在出现头指针的情况下,及时创建新分支,并且已经做了修改并提交,此时的提交并不会记录在之前的分支记录上,记录在断头的分支上,解决方法如下:
  1. 切换到要将该修改合并到哪个分支上: git checkout master
  2. 根据commit_id合并: git merge aacc87 commit_id 通过git log查看,断头模式的记录一般保存会有个超时时间,应尽早合并

git checkout 命令列表

  • git checkout == git checkout HEAD
  • git checkout -- filename 用暂存区中的文件替换工作区中的文件, file包含.git路径到文件的相对路径
  • git checkout master -- filename 用分支master中的filename覆盖工作区和索引区的文件
  • git checkout . == git checkout -- . 用暂存区的所有文件替换工作区文件
  • git checkout HEAD . 从版本库中获取文件覆盖暂存区和工作区的修改:
  • git checkout HEAD file 用版本库的文件覆盖暂存区和工作区
  • git checkout HEAD~1 -- haha.txt 星号相当于向前查找某个版本
  • git checkout hello-1.x 这边的hello1.x是远程分支的话,会创建和远程分支一样分支名的本地分支,会建立和远程分支的跟踪关系,如果是本地分支,则不会有跟踪关系
  • git checkout --track -b hello-1.x.bak hello.1.x 建立追踪关系,git pull 可以直接拉取更新
  • git checkout hello-1.x origin/hello-1.x 显示创建和远程分支一样名字的本地分支,会建立和远程分支的跟踪关系

git cherry-pick <commit_id> 改变版本历史,

git cherry-pick 应用一些已经存在的改变,如: A --》 B --》C --》D --》E --》F, 现在不要D了, 步骤如下:

  1. git checkout c 会导致处于detached HEAD模式
  2. 嫁接E: git cherry-pick master^
  3. 嫁接F: git cherry-pick master
  4. 断头模式处于为命名的分支,切换回master分支: git checkout master
  5. 用匿名分支的覆盖当前master分支,相当于为master分支迁移到了刚刚的匿名分支: git reset HEAD

git rebase 变基过程

命令格式

  • git rebase --onto <NewBase> <since> <till> 变基过程不包含<since>包含<till>,命令执行后HEAD --> till 过程如下:
  1. git checkout <till> 处于断头模式
  2. <since>...<till> 的提交保存到临时文件
  3. git reset --hard <newbase>
  4. 将临时文件的<since>...<till>从newbase节点,逐一更改提交
  5. 若冲突则需要人工处理冲突,再决定是否变基
  6. 整个过程都在断头模式的匿名分支中,最后将匿名分支的修改,应用到要实现变基过程的分支上:git checkout master --> git reset --hard <till>
  • git rebase --onto <NewBase> <since>
  • git rebase <since> <till>
  • git rebase <since>
  • git rebase --continue 变基过程若出现冲突,解决冲突(跟新到暂存区,不提交),继续执行变基
  • git rebase --skip 跳过冲突继续变基过程
  • git rebase --abort 回滚变基过程
  • git rebase -i <since> 交互过程,可以选择要应用提交,比较直观了解。显示的信息,是在<since>节点之后的所有提交,都是基于当前分支操作,所以省去了前两种变基过程复杂的命令参数。

之前案例的执行过程


辅助功能

比较工具diff

  • git diff 默认是比较work 和 index间的区别,如果执行git add之后,是看不到git diff比较的结果
  • git diff --cached 比较的是index 和 版本库间的区别,只有在git add 之后,还没commit之前能看到记录
  • git diff HEAD 工作区和版本库的比较
  • git diff HEAD^ HEAD [-- ./get_app_info/pipelines.py] 当前分支前一个版本和当前版本对比, 的某个文件, 想比较当前版本和前一个版本的去别,当前版本的参数放第二个位置

修改已经提交的日志

  • git commit - -amend
  • git rebase -i <commit_id> commit_id可以通过git log查看

git stash 工作区的应用

如果接到紧急的任务,需要从一个干净的工作区开始工作,或切换到别的分支工作,需要快速保存当前尚未完成的工作进度

  1. git stash == git stash save ‘message'
  2. git checkout <new_branch>
  3. 新的工作ing, 完成后
  4. git checkout <original_branch>
  5. git stash pop

命令

  • 显示工作区列表: git stash list
  • 删除工作区: git stash drop
  • 清空工作区: git stash clear
  • 基于进度创建分支: git stash branch <branchName> <stash>
  • git stash apply [--index] [<stash>] 如同pop,但是不删除stash list中的进度信息

git push

  • 强推本地分支覆盖远程分支: git push -f origin master:master

gitignore独享式

  • git config --global core.excludesfile /home/cdz/.gitignore 设置个人独享的gitignore文件
  • 或者在vi .git/info/execlude 创建文件

文件归档

如果用系统默认的归档工具,可能会将.git文件夹也打包进去

  • 基于最新的提交建立归档文件: git archive -o latest.zip HEAD
  • 归档个别目录: git archive -o latest.tar HEAD src doc
  • 基于里程碑v1.0建立归档,并且为归档中的文件添加目录前缀1.0: git archive --format=tar --prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz

查看相关信息命令

  • git grep "日志" 搜索版本库文件中包含日志的行
  • 显示版本库.git所在的目录: git rev-parse --git-dir
  • 显示工作区根目录: git rev-parse --show-toplevel
  • 显示相对工作区根目录的相对目录: git rev-parse --show-prefix
  • 解析引用对应的提交ID: git rev-parse master HEAD(head或refs/head/master)
  • 显示精简的修改信息: git status -s 输出格式: index work filename
  • git cat-file commit HEAD(master 66abkhde) 用于显示objects库的信息
  • git show <commit_id> 用于显示objects库的信息
  • git ls-files --with-tree=HEAD^ ls-files 用来显示index和work文件信息
  • git rev-list HEAD 查看本地提交列表
  • git ls-remote origin 查看远程提交列表
  • 文件追溯: git blame file 可以查看
  • git show-ref 查看引用列表,包含分支信息,tag信息,其实就是查看.git/refs文件的目录结构,相当于tree .git/refs

6652a0dce6a5067732c00ef0a220810a7230655e refs/heads/master
6652a0dce6a5067732c00ef0a220810a7230655e refs/remotes/origin/HEAD
6652a0dce6a5067732c00ef0a220810a7230655e refs/remotes/origin/master
c9b03a208288aebdbfe8d84aeb984952a16da3f2 refs/tags/A
1a87782f8853c6e11aacba463af04b4fa8565713 refs/tags/B

  • heads/ 存放的是分支
  • remotes/ 存放的远程分支
  • tags/存放的里程碑
  • git cherry -v origin/master~1 查找比上流分支更新的提交
  • git

git log命令

  • git log HEAD 只能查看当前分支日志
  • git log XXX 可以查看其它分支的日志

git clean 清除工作区中未追踪的文件,会删除没被追踪的文件

  • git clean -nd 测试真正执行git clean命令会删除哪些目录
  • git clean 最好别用

磁盘空间清理

  • git fsck 查看暂存区,引用游离的对象(这些游离的引用一般是有,已经add到暂存区,但是还没提交到版本库)
  • git prune 清除暂存区游离的对象,节省空间
  • 如果将错误的文件提交到版本库,通过 git reset --hard 回退版本 ,文件的引用还可以在reflog中找到引用,git prune无法清除,需要以下步骤才能清除:
  1. git reflog expire --expire=now --all now是一个日期,强制让now之前的记录全部过期,相当于清空reflog
  2. git prune 清理

复制本地git版本库

  • git clone ./demo demo1

将远程仓库的特定分支拉到本地

  • git pull origin master

相关文章

  • 常用命令集

    npm常用命令集 fis3常用命令集 git常用命令(在linux终端中输入命令) 远程仓库 babel常用命令集

  • Git命令集合

    Git基础命令 git远程关联 git远程关联移除 git命令简单简介 常用命令集合:git init创建版本库 ...

  • Git本地库常用命令集

    Git本地库常用命令集 以下所有的git命令都是在测试目录/git/下进行的.mkdir /git git ini...

  • Git 管理 (二)

    原文地址梦想小筑 Git的奇技淫巧:see_no_evil: Git常用命令集合,Fork于tips项目 Git是...

  • Git使用技巧

    Git的奇技淫巧:see_no_evil: Git常用命令集合,Fork于tips项目 Git是一个“分布式版本管...

  • git 常用命令

    前言 Android 常用命令集,只做随笔,会不断更新 解决方案 初始化命令git init 提交命令git ad...

  • 常用Git命令集合

    1、查看所有taggit tag2、查看某个版本系列的taggit tag -l '1.0.0'3、创建标签git...

  • Git常用命令集合

    Git常用命令集合 刻意练习 现代的ide里面都集成了很多Git,Maven的操作命令,让开发者点一点就很容易执行...

  • git 命令(文本版)

    前言 git常用命令,欢迎关注,持续更新... 初始化配置 查看 提交与恢复 分支相关 远程推送 命令集合解释

  • git初识(常用git命令集合)

    一、本地创建git项目推送到远程仓库 1.查看本地库的远程仓库地址 git remote -v 2. 远程仓库地...

网友评论

      本文标题:git 常用命令集

      本文链接:https://www.haomeiwen.com/subject/ijtkchtx.html