git常用命令总结

主要

git commit

  • 作用:保存一次提交
  • 说明:git仓库中的提交记录保存的是你目录下所有文件的快照,类似于复制粘贴,但比复制粘贴优雅,会将当前版本与仓库中上一个版本的差异打包到一起作为一次提交。
  • 参数:
    1. -m 添加提交信息
    2. -am git add .git commit -m ""的组合写法
    3. –amend
  • 例子: git commit -m "一次提交记录"

git branch

  • 作用:创建新分支
  • 说明:
    1. 简单的指向某个记录,不会造成存储和内存上的开销。
    2. 分支和提交记录关系是,基于这个提交以及它所有的父提交进行的新工作。
  • 参数:
    1. -f 强制移动分支
    2. -a 列出所有分支,包括远程分支和本地分支
    3. -D branchName,删除本地分支
  • 例子:
    1. git branch newimage创建newimage分支
    2. git branch -f master HEAD~3将 master 分支强制指向 HEAD 的第 3 级父提交.不必在master分支上执行此操作,在任何分支上执行都可以
    3. git branch bugWork HEAD~3 将HEAD 的第 3 级父提交标记为bugWork分支
  • 相关命令: git checkout -b newimage创建并切换到分支newimage; git checkout -切换到前一次分支

git merge

  • 作用: 合并两个分支
  • 说明: 合并是会产生一个特殊的提交记录,有两个父节点,会把两个父节点及其祖先都包含进来。
  • 参数:
  • 例子: 在master分支上执行git merge bugFix,意味着将bugFix分支的代码合并到了master上,master拥有了代码库的所有修改
  • 相关命令: git commit -am ""解决完冲突后提交

git rebase

  • 作用: 合并分支
  • 说明:
    1. 取出一系列提交记录,然后在另一个地方逐个放进去,相对于merge优势是可以创造更线性的提交历史
    2. Rebase优点 使你的提交树变得很干净, 所有的提交都在一条线上
    3. Rebase缺点 修改了提交树的历史
  • 参数:
  • 例子:
    1. 在bugFix分支上执行 git rebase master,将bugFix分支的工作直接移到master分支上,移动后两个分支功能看起来像是顺序开发的。
    2. git rebase master bugFix 等于 git checkout bugFix ;git rebase master
  • 相关命令:
    1. git add .解决一次冲突后添加;
    2. git rebase --continue解决一次冲突后继续rebase
    3. git rebase --skip跳过这个提交
    4. git rebase --abort终止并回到之前的状态
    5. git am --show-current-patch

git checkout

  • 作用: 分离HEAD
  • 相关概念:
    1. HEAD 当前检出记录的符号引用,指向正在工作的提交记录。
    2. 使用^向上移动1个提交记录
    3. 使用 ~<num>向上移动多个提交记录,如 ~3
  • 说明: 在提交树上移动
  • 参数:
  • 例子: git chekcout master^^切换到master的第二个父节点
  • 相关命令:
    1. cat .git/HEAD查看 HEAD 指向,git symbolic-ref HEAD如果head指向的是一个引用,用改命令查看
    2. git log查看提交记录,git log --graph以图表的形式查看提交记录

git reset

  • 作用: 撤销变更
  • 说明:
    1. 通过把分支记录回退几个提交记录来实现撤销改动,原来的指向提交记录跟没有提交过一样。
    2. 在reset后,所做的变更还在,但是处于未加入暂存区状态
    3. 对大家一起使用的远程分支无效。
  • 参数:
  • 例子: git reset HEAD^撤销本次commit,本地代码不会改变
  • 相关命令:

git revert

  • 作用: 撤销更改并分享给别人
  • 说明: 撤销提交后会多一个提交,新提交和你要撤销到的提交状态是相同的。revert后可以直接推送到远程库
  • 参数:
  • 例子: git revert HEAD 撤销本次提交,本地代码会改变
  • 相关命令:

git cherry-pick

  • 作用: 整理提交记录
  • 说明: 将一些提交复制到当前所在的位置(HEAD)下,知道所需的提交记录,用cherry-pick比较好
  • 参数:
  • 例子: git cherry-pick c2 c4将c2 c4挑出来放到当前分支下
  • 相关命令:

git rebase -i

  • 作用: 交互式的 rebase 带参数–interactive,简写为 -i
  • 说明: 从一系列的提交记录中找到想要的记录,需要去选择你所需要的提交记录
  • 参数:
  • 例子: git rebase -i HEAD~2
  • 相关命令:

git tag

  • 作用: 指向某个提交记录的标识
  • 说明:
    1. 将某个特定的提交命名为里程碑,然后就可以像分支一样引用了
    2. 它们并不会随着新的提交而移动。
    3. 你也不能检出到某个标签上面进行修改提交,它就像是提交树上的一个锚点,标识了某个特定的位置。
    4. 在tag上进行的修改提交。会使你的改动作为一次新的提交,而tag上的内容不会变
  • 参数:
  • 例子: git tag v1 c1命名提交记录c1 v1,不指定提交记录,git会用HEAD所指向的位置。
  • 相关命令:

git describe ref

  • 作用:
  • 说明:
    1. ref 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)
    2. 输出tag_numCommits_hash
      1. tag 表示的是离 ref 最近的标签
      2. numCommits 是表示这个 ref 与 tag 相差有多少个提交记录
      3. hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。
  • 参数:
  • 例子:
    1. git describe --tags列出离当前位置最近的tag
  • 相关命令:

^num

  • 作用: 指定合并提交的某个父节点
  • 说明: Git 默认选择合并提交的是“第一个”父提交,在操作符 ^ 后跟一个数字可以改变这一默认行为。
  • 参数:
  • 例子:
    1. git checkout master^HEAD分离到master正上方的提价记录(默认方式)
    2. git checkout master^2HEAD分离到master另一个父提交记录
    3. git checkout HEAD~^2~2HEAD分离到当前位置的父节点的另一方父节点的祖父节点上
  • 相关命令:

远程

git clone url

  • 作用: 在本地创建一个远程仓库的拷贝
  • 说明: 远程仓库指你的仓库在另个一台计算机上的拷贝。可以通过因特网与这台计算机通信 —— 也就是增加或是获取提交记录

git remote
git remote add [shortname] [url]:

  • 作用:查看远程仓库
  • 说明:
  • 参数:
    1. 不带参数,列出已经存在的远程分支
    2. -v | --verbose 列出详细信息,在每一个名字后面列出其远程url
  • 例子: git remote add o1 uri 添加一个远程仓储,简称为o1

remote name / branch name

  • 作用:远程分支
  • 说明:
    1. 远程分支反映了远程仓库(在你上次和它通信时)的状态
    2. 远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态。Git 这么做是出于不能直接在这些分支上进行操作的原因, 你必须在别的地方完成你的工作, (更新了远程分支之后)再用远程分享你的工作成果。
    3. 远程仓库默认名为origin

git fetch

  • 作用: 将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态
  • 说明:
    1. 从远程仓库下载本地仓库中远程分支缺失的提交记录
    2. 更新本地的远程分支指针(如 o/master)
    3. 并不会改变你本地仓库的状态。它不会更新你的本地分支,也不会修改你磁盘上的文件
  • 例子: git fetch下载所有的提交记录到本地的各个远程分支……

git pull

  • 作用: 将远程仓库的变化更新到本地
  • 说明:
    1. 先抓取更新再合并到本地分支
    2. git fetch;git merge origin/master等价 git pull
  • 参数: --rebase

git push

  • 作用: 你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录
  • 说明:
    1. 不带任何参数时的行为与 Git的 push.default 配置有关
    2. git fetch;git merge origin/master等价 git pull
      这情况(历史偏离)有许多的不确定性,Git 是不会允许你 push 变更的。实际上它会强制你先合并远程最新的代码,然后才能分享你的工作。

远程跟踪

  • master 和 o/master 的关联关系就是由分支的“remote tracking”属性决定的,你克隆仓库的时候, Git 就自动帮你把这个属性设置好了。
    在你clone 的时候会看到 local branch "master" set to track remote branch "o/master"
  • 自己指定分支
    1. 方法一 git checkout -b totallyNotMaster o/master创建一个名为 totallyNotMaster 的分支,它跟踪远程分支 o/master
    2. 方法二 git branch -u o/master foo 这样foo 就会跟踪 o/master 了。如果当前就在 foo 分支上, 还可以省略 foo

git push remote place

  • 作用: 推送到远程remote的place分支
  • 说明: 不用切换到指定分支,推送指定分支到远程

git push origin source:destination

  • 说明:指定了独立的来源source和目的地destination
  • 例子:
    1. git push origin foo^:master 退送foo^位置的变更到远程仓库的master分支
    2. git push origin master:newBranch 目标分支不存在,git会根据你所提供的名称帮你创建这个分支

git fetch remote place

  • 说明: 和git push 方向相反,从远程到本地
  • 例子: git fetch origin foo到远程仓库的 foo 分支上,然后获取所有本地不存在的提交,放到本地的 o/foo 上

git fetch remote source:destination
* source:远程仓储的位置
* destination 才是要放置提交的本地仓库的位置

  • 说明:
    1. 直接更新本地分支,你不能在当前检出的分支上干这个事,但是其它分支是可以的。
    2. 理论上虽然行的通,但开发人员很少这么做。我在这里介绍它主要是为了从概念上说明 fetch 和 push 的相似性,只是方向相反罢了

古怪的source

git push origin :sidepush空source会删除远程仓库中的分支
git fetch origin :bugFixfetch空source会在本地创建一个分支

git pull remote place

  • 说明: 唯一关注的是提交最终合并到哪里
等效命令:
  • git pull origin foogit fetch origin foo;git merge o/foo
  • git pull origin bar~1:bugFixgit fetch origin bar~1:bugFix; git merge bugFix
  • 例子:
    1. 在本地的bar分支执行git pull origin master,将 o/master merge 到我们的检出位置,无论我们当前检出的位置是哪。
    2. git pull origin master:foo在本地创建了一个叫 foo 的分支,从远程仓库中的 master 分支中下载提交记录,并合并到 foo,然后再 merge 到我们的当前检出的分支 bar 上
冲突解决

如果远程分支v1 在合并到 v2 时出现冲突。
则在本地的v2 分支merge v1 分支,然后将本地v2分支push到远程。

gitignore

在文件是unchecked状态时可以直接在.gitignore文件中加上对该文件的忽略即可成功。但是如果文件已经被git管理,此时要忽略改文件就需要先修改.gitignore文件,然后执行如下命令:

git update-index --assume src/main/webapp/META-INF/context.xml
git update-index --assume-unchanged /path/to/file       #忽略跟踪
git update-index --no-assume-unchanged /path/to/file  #恢复跟踪
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值