远方有多远,请你告诉我!

Git的简单应用

Posted on By 赵赵赵小白

  • <-s> 参数可以输出简短的结果日志
  • 初始化仓库 git init <directory>
  • 克隆 git clone <repo> <directory>
  • 跟踪文件,将文件添加到缓存 git add <file>
  • 查看项目当前状态 git status
  • 提交说明 git commit -m "说明"
  • 提交到缓存区 git add [file | . | *]

git diff

  • git diff 尚未缓存的改动
  • git diff --cached 已缓存的改动
  • git diff HEAD 所有改动
  • git diff --stat 显示摘要而非整个diff

git commit

  • git commit 将缓存区内容添加到仓库中
  • git commit -am 跳过提交缓存

git reset HEAD

  • git reset HEAD <file> 取消已缓存的内容

git config

  • git config --global user.name 'zzzxb'
  • git config --global user.email 'idearfree@outlook.com'

git rm

  • git rm <file> 从已跟踪文件清单中移除文件
  • git rm -f <file> 删除修改过并且已经放到暂存区域的文件 -f强制选项
  • `git rm –cached 把文件从暂存区移除

git mv

  • git mv 移动、重命名一个文件、目录、软连接

git branch

  • git branch (branchname) 创建分支命令
  • git checkout (branchname) 切换分支命令
  • git checkout -b (branchname) 创建并立即切换到该分支
  • git merge <branchname> 合并分支命令

合并冲突

  • 合并分支并手动修改

查看提交历史

  • git log 日志
  • git log --oneline 简洁版
  • git log --reverse --oneline 逆向显示所有日志
  • git log --author=zzzxb --oneline -5 获取某个作者的日志
  • git log --oneline --before={3.weeks.age} --after={2010-04-18} --no-merges 根据时间查询日志

标签

  • 创建轻量标签
    • git tag v1.1.0
  • 创建附注标签 ( 就是带说明的轻量标签 )
    • git tag -a v1.1.1 -m "说明文字"
  • 注意,创建的标签会自动 打在最近的提交点上
  • 如果要给过往的提交点 追打标签,需要 git log 去查看提交点的 “commitID”
    • git tag [-a] v1.1.1 "commitID"
  • 查看所有分支上的所有标签
    • git tag
  • 查看标签名以 “v1.1” 开头的标签
  • 显示标签及其对应的提交信息
    • git show v1.1.0

共享标签

  • 同步一个标签
    • git push origin v1.1.1
  • 同步所有标签
    • git push origin --tags

删除标签

  • 本地删除标签
    • git tag -d v1.1.1
  • 删除远程仓库中的标签
    • git push origin :refs/tags/v1.1.1

标签使用

  • 分离一个指针到 v1.0 提交点位置
    • git checkout v1.0
    • git checkout commit ID
    • mvn package
    • git checkout "任意分支"

别名

  • git ck等价git checkout
    • git config --global alias.ck checkout
  • git commitm 等价 git commit -m
    • git config --global alias.commit "commit -m"
  • git br
    • git config --global alias.br branch
  • 删除alias.commitm
    • git config --global --unset alias.commitm

回退版本

  • git log --oneline 获取提交历史
  • git reset HEAD <id> 通过一步的id进行回退
  • git push -f -u origin master 提交到主分支

忽略文件

在idea开发时,会有很多和项目本身无关的文件

还有一些是不能共享的项目文件,比如包含自己数据库信息的 db.properties

还有java的字节码文件 此类文件,不必出现在版本控制中,可以在项目根目录下创建忽略文件:.gitignore,文件中定义

# 所有class后缀文件
*.class
# abc.class除外
!abc.class

十、补充 (了解)

10.1 储存工作

功能还没写完,还不适合提交,但此时需要去解决另一个bug,需要切换分支,则当前功能工作区中的改动会被新分支的内容覆盖,所以此时可以先储存下当前功能的内容,然后就可以放心的切换到其他分支先干别的事,过后再回来。

git stash :储存当前修改( 未提交的内容 ,包括未暂存和已暂存的)

#                                             分支                      文件
Saved working directory and index state WIP on dev: a795274 dev commit Test.java

git stash list:查看存储列表

# 标识            分支                      储存文件
stash@{0}: WIP on dev: a795274 dev commit Test.java

git checkout 其他分支:可以放心的切到其他分支,完成其他工作

git checkout dev:切回dev分支,并:git stash apply:恢复储存的工作,继续编码

注意:没用的存储建议删除:git stash drop stash@{0}:删除某一个储存点

git stash clear:清空所有储存点

10.2 回退详解

三种回退模式:mixed、hard、soft,默认mixed。

  • git reset –mixed HEAD~
  • git reset –hard HEAD~
  • git resst –soft HEAD~

回退是指:提交点回退。就是在某个分支上指针后移。回到之前的某个版本。

# 基本使用: 当前分支 指针回退两步,就是回退到上上一个提交点。(无论是 mixed,soft,hard)
git reset HEAD~~
git reset HEAD~2
# 基本使用: 当前分支 指针指向到对应commitID的的提交点
git reset commitID

会退时,除了指针必然移动,还有些细节:

##################### Soft ##########################
# 指针后退一步,但暂存区内容不变,工作区内容不变
git reset --soft HEAD~
加入有3个提交点,依次为 A --> B --> C
A中:添加一个文件abc.txt
B中:修改abc.txt,及其他一些修改
C中:添加一个文件def.txt 并提交。
C中:继续修改,并最终完成功能,做最终提交。可以还有一种选择:
【先从C回退到A,然后再提交,提交点就变为:A --> D.提交后内容总量不变,但起到提交点被压缩】
##################### Mixed ##########################
# 指针后退一步,但暂存被清空:即版本库回到了上次提交的状态。 但工作区不变。
git reset --mixed HEAD~
# 然后执行:
git checkout -- abc.txt #从版本库中拉取abc.txt文件,可以将工作区的某个文件回退到上个版本
##############################################
# 或者执行,达到将暂存内容清空
git reset --mixed HEAD #指向当前提交点,其实没回退指针,但会清空暂存。
# 然后执行:
git checkout --abc.txt ##从版本库中拉取abc.txt文件,恢复当当前版本的原始状态 ( 撤销了所有修改 )
###################### Hard ###########################
#指针后退一步,暂存清空,且将工作区也同步到指针所指的状态
git reset --hard HEAD~  # 用于拉取某个特定提交点的文件

10.3 修补提交

提交后发现有问题,比如有些注释忘记修改,比如提交描述不够详细等等。

当然可以修改后,在提交一次,但是还有更好的办法:

git commit --amend -m"xxxxx":会再次提交并替换上次提交

创建/删除本地分支并提交(2020-5-7)

进入到 git 项目的根目录

创建并推送

  • 创建本地分支 git branch 分支名字

  • 切换到新分支 git checkout 分支名字

  • 推送到远程仓库 git push origin 分支名字

删除并推送

  • 查看本地分支,以及同步情况(发红的是已经同步到远程仓库了)git branch -a

  • 仅删除本地分支git branch -d 分支名字

  • 仅删除远程仓库分支(冒号必须带的)git push origin :分支名字

某个分支上的某个log点,合并到某个分支

比方说我又分支 A, B, 在此 B 分支已经提交了10次了,但我只想合并某一次的提交.

  • git checkout B 首先切换到B分支,需要获取题提交log的分支
  • git loggit reflog 查询B分支提交情况,并复制某一次提交的的 commitid
  • git checkout A 切换到 A 分支,需要合并数据到的 A 分支
  • git cherry-pick commitid

这样,B 分支下的某个时间点提交数据,就合并到了 A 分支下