美文网首页
git 一些实用命令

git 一些实用命令

作者: vavid | 来源:发表于2020-04-02 10:28 被阅读0次

git 有一些使用频率不是很高,但是根据实际情况的发生,又很实用的命令,整理如下:

多行commit信息

用法示例:

git commit -m 'update: 打包优化' -m 'update: stats to minimal'

效果如下:

Author: vavid 
Date:   Fri Jul 10 14:10:16 2020 +0800

    update: 打包优化
    
    update: stats to minimal

修正 commit

一次 commit 后,未 push 之前,发生了改动较少信息的情况,比如修正个别文案,注释等,目的是为了减少 commit 记录,用修正的这次 commit 覆盖上次的 commit

$ git add .
$ git commit -m 'update: 模块'
...
//紧接着,你改了几个字
...
$ git commit --amend -m 'update: 完善模块'
$ git push

注意:push 之后不建议使用 amend 去commit,因为会与上一次 commit 产生冲突,但是也有解决办法,继续往下看

撤销 commit

前提:已经 commit 但未 push,若已经 push ,别急,先看这条,然后看下一条

首先要了解:
--mixed // 默认,保留工作内容,并且清空暂存区
--hard  // 改动的工作内容直接丢弃,谨慎使用
--soft  // 工作内容保留在暂存区

注意:保留工作内容的情况,是为了方便基于保留的内容继续做修改,但是撤销下来的内容确认是不需要的,这时要手动做丢弃。


比如要撤销最近一次的 commit ,有以下三种等价写法:

// 改动的内容直接丢弃|保留在暂存区
git reset [--hard|--soft] HEAD~1  
git reset [--hard|--soft] HEAD^  
git reset [--hard|--soft] {SHA-1}  


再比如要撤销最近两次修改

git reset [--hard|--soft] HEAD~2  
git reset [--hard|--soft] HEAD^^  
git reset [--hard|--soft] {SHA-1}  // 这里的SHA-1要取倒数第三次的

注意: a. 最后一种写法适合撤销最近的修改的次数较多的情况,指的是撤销从 {SHA-1} 这次提交之后所有提交;
b. 使用 reset 撤销HEAD指针会向后移动


还可以使用变基,了解一下

git rebase -i HEAD^^ // 同理,参考以上写法进行拓展
git rebase --onto HEAD^^ HEAD^ feature1

已经 push 完,修正或者撤销 commit

这种情况分两步走:
第一步,先按照上面修正或者 撤销 commit 的方式操作完
第二步,不要慌,然后强行 push 👉 git push -f

git push origin {目标分支} -f  // -f 是 --force (暴力,强迫)

注意:如果该分支是你独立的开发分支,那没有任何问题;如果是多人合作的开发分支,因为有强制更新的操作,所以要先确认在你强制 push 之前的一瞬间,其他人没有 push 过他自己最新的代码。

还有另外一种撤销操作 revert

git revert HEAD // 撤销最近的一次commit,然后push
git revert HEAD^ // 撤销倒数第二次提交,然后push
git revert {SHA-1} // 先 git reflog 找到你要撤销的那次的 sha1 码(可只写前几个字母),然后push

resetrevert 的区别

  1. reset 一次 commit 之后,HEAD 会向后移动,如果之前已经push过,那么 reset 之后查看 git status 或者 git commit 时会提示 (use "git pull" to update your local branch),git push 会提示
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g. 'git pull ...') before pushing again.

确认好撤销动作后,强行push(见上)到远程即可。

  1. revet 一次 commit 之后,HEAD 是向前的,相当于反向再增加一次操作记录,多用于撤销某一次提交记录的情况;

暂存

一些情况我们需要用到暂存 git stash
暂存文件时,添加备注,以便于区分:

git stash save "备注描述"

但是,未被 track 的文件不会被暂存,导致暂存 git stash 不生效,有一个办法:

git stash -u // -u 是 --include-untracked 的缩写

将某条stash记录应用到仓库中(stash记录仍然在):

git stash apply  // 最新的一条stash
git stash apply stash@{$num}  // 指定某一条stash记录

将某条stash记录弹出到仓库中(stash记录消失):

git stash pop  // 最新的一条stash
git stash pop stash@{$num}  // 指定某一条stash记录

删除某条暂存:

git stash drop stash@{$num} 

取消合并

比如合并错分支,想取消合并的情况:

git merge --abort

修改分支名称

比如要将分支名 feature1 改为 feature2

git branch -m feature1 feature2  // 对分支 `feature1` 重命名为 `feature2`
git push --delete origin feature1 // 删除远程的 `feature1` 分支
git push origin feature2 // 将 `feature2` 推送到远程
git branch --set-upstream-to origin/feature2 // 把修改后的本地分支 `feature2` 与远程分支 `feature2` 关联

删除分支

一个分支feature1完成上线并合并到主分支后,想删除的情况:

git branch -d feature1   // 只删除本地
git branch origin -d feature1  // 删除本地+远程

一个分支feature1未完成,未合并到主分支,删除的时候 git 会给出警告,但就是想直接废弃的情况:

git branch -D feature1 // -D 强制删除

耶?分支删除了又想恢复的情况怎么办?

$ git reflog
...
找到被删除前的那次 commit 记录的 sha1码(如:c08de9a ......)
$ git checkout c08de9a  // 切到这次 commit
$ git checkout -b {新分支名称} // 重新创建一个分支

查看记录

git reflog

想要查看每个 commit 的改动细节的情况:

git log -p // -p 是 -patch 的缩写

想要查看每个 commit 的改动大概的情况:

git log --stat

想要查看某个 commit 的具体改动的情况:

git show {SHA-1}  // 要指定某一个文件查看,后面再加上文件名

强制合并分支

有些时候,目标分支 master 有优先于你本地的 commit 记录,但是这些 commit 并没有太大意义,如果你想将你的分支 feature1 强制合并到目标分支 master,先切换到目标分支 master,然后

git push origin {feature1}:master -f

这时候你的分支 feature1 的最新改动会被合并到 master 分支,但是你本地的 commit 仍然和远程 master 分支有差距,因此不能直接用 git pull(会提示有冲突需要解决),而要用

git fetch --all //下载远程仓库最新内容,不做合并
git reset --hard origin/master //把HEAD指向master最新版本

变基 rebase

给当前的的 commit 序列重新设置基础点,相当于在目标分支合并多个 commit,目的是为了分支清晰好管理

$ git checkout feature1 
$ git rebase {目标分支}  // 需要在feature1分支执行rebase
$ git checkout {目标分支}
$ git merge feature1

取消 rebase

git rebase --abort

几个 git 技能点

  1. tag
    tagbranch 最大的区别是不能移动,所以通常用在关键版本打标记
    比如将当前分支标记为:v1.0,并且增加一些对这个标记的描述信息:add tags information
$ git tag v1.0 -m "add tags information"
$ git push --tags

更多tag相关操作详见:git tag的基本用法

  1. cherry-pick
    可以将某一分支的某一次提交合并进来
 git cherry-pick {SHA-1}  

更多 cherry-pick 详见
git cherry-pick的使用
https://git-scm.com/docs/git-cherry-pick

相关文章

  • git实用命令

    git实用命令 1 git init 命令 初始化 git 仓库 repository 2 git add 命令 ...

  • 【git】git实用基本概念 git add git comm

    git使用要从官网下载 .exe文件安装实用,实用Linux命令,(why,因为git的创始人就是Linux的创始...

  • Git命令

    Git命令简介 git命令是一些命令行工具...

  • git 一些实用命令

    git 有一些使用频率不是很高,但是根据实际情况的发生,又很实用的命令,整理如下: 多行commit信息 用法示例...

  • git的常用命令及工作中冲突问题解决方法

    工作中其实用的最多的就是这些命令git status 查看状态git add -A 将所有文件提交至暂存区git ...

  • 轻松学习命令行基础

    Git Bash和cmd都提供了命令行,操作方便非常实用,我们以Git Bash为例来总结一下几个常用的命令。 一...

  • git 入门

    文章涉及的一些命令 git init git add git commit -v。 一 在使用这些命令前确认...

  • GIt 操作补充

    常用的git操作命令 常用的git操作命令已经能够满足日常的工作需求 现补充一些高级命令 git branch -...

  • 职场经验:那些实用的git命令

    书到用时方恨少,git命令也是如此,当遇到问题需要用到的时候,才发现知道的太少~。下面介绍几个比较实用的git命令...

  • Git的一些常用命令

    git的一些常用命令和协作流程 1. 远程仓库相关命令 命令作用$ git clone克隆仓库$ git remo...

网友评论

      本文标题:git 一些实用命令

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