git的常见使用场景

520 阅读5分钟

【这是我参与更文挑战的第7天,活动详情查看: 更文挑战

删除不必要的分支

git branch -d <分支名>    // git branch -d develop

分支在没有合并时且要删除可用git branch -D 分支名

修改commit的描述

  • 修改最近一次的提交描述
git commit --amend

输入命令后会终端会可交互式界面(vi/vm界面),但此时还不能输入,必须按键盘i才可以输入,修改完成按ESC然后按:wq保存并退出,此时可以使用git log查看刚修改的commit描述信息

实践一下:将first commit改为中文“第一次提交” image.png

在终端中输入git commit --amend回车后,便出现如下图所示

image.png

输入键盘上i键,输入后便会出现如下图中的标识,左上角的光标由键盘的上下左右键来控制,修改完成后,按键盘上ESC,然后再按:wq保存并退出

image.png 此时再使用命令git log或者git reflog进行查看,如下图 image.png

  • 修改历史提交的描述
git rebase -i <被修改提交的上一次提交的哈希id>

修改下图红色框中的描述信息 image.png 实操一下就是:

git rebase -i 1e774773a5da8e87ed18617813f0443c662b759c

image.png 输入命令执行相关操作 将要修改的commit前面的交互命令改为我们要执行的 r

r:就是下面Commands中的r, reword  = use commit, but edit the commit message

image.png 修改后,按ESC,然后在按:wq保存并退出 image.png 回车后终端就会进入和上面修改最近一次提交描述一样的交互式终端(如下图)image.png 修改完成后ESC:wq保存并退出,然后查看就大功告成啦 image.png

怎么把连续的多个commit整理成1个

我要将下图红色框中的4次提交合并为一个commit image.png

要将红色框中的四次提交合并为一个commit,就得使用到和上一个修改一样的方法git rebase -i <哈希id> 这儿的哈希id和上一个问题的一样,都是被修改提交的上一次提交的哈希id,这儿便是d159f0aee610b8d5f8d376217c1811de9b42241d(也就是截图中的最后一个commit的哈希id)

在终端中输入如下命令执行

git rebase -i d159f0aee610b8d5f8d376217c1811de9b42241d

执行命令后会进入一下界面 image.png 按键盘i键,进入可交互式输入模式,将所要修改的提交前的标识改为squash(也就是commands中的s);如下图输入完成之后,按ESC退出,然后按:wq保存,回车 image.png 回车后就会出现如下界面 image.png 然后在第一行写本次修改的描述,然后ESC退出,:wq退出交互式终端并保存 image.png 查看刚修改的:git log image.png

怎么把间隔的几个commit整理成一个

将红色框中的两次此提交合并为一次 image.png

git rebase -i 1e774773

将要合并的分支排在一起,并将其标识改为s;如下图:

image.png 查看修改后的结果: image.png

比较暂存区和HEAD所含文件的差异

在utils.js文件中添加了一个sum函数,加入(git add .)暂存区后使用命令来比较

image.png 对比当前暂存去与上一次提交的内容变更:命令(git diff --cached);此时还没有提交,所以修改后在add也不会生成commit记录 image.png

比较工作区和暂存区所含文件的差异

在mian.js中添加如下代码后直接git diff 进行对比

import Koa from 'koa'

const app = new Koa()

const port = 3000;
app.listen(port, () => console.log(`${port}`))

image.png

Tips:

  • 如果对所有的文件进行对比的话就直接git diff
  • 如果对单个(或者多个)文件进行对比的话,可以diff后面添加一个(或者多个)文件名,命令:git diff -- <文件名>

image.png

如何让暂存区恢复成HEAD的一样?

查看暂存区的变更内容如下

image.png

若要变更到与变更之前的那个版本可以使用git reset HEAD命令,如果单个文件要变更到变更之前的那个版本则可以在HEAD后面添加文件名git reset HEAD <文件名>

image.png

如何让工作区的文件恢复和暂存区的一样?

将上一个问题reset的文件重新提交到暂存区并作比较

image.png

现在我会在app.listen(port, ()=> console.log(${port}))后面添加中文标识

image.png 现在不想要中文标识的那次修改了,该怎么恢复呢? image.png

怎么取消暂存区的部分文件的更改

现在暂存区中有三个文件已经被修改,若要丢弃utils.js文件的修改,应如何操作?

image.png

回复一个或多个文件使用命令:git reset HEAD -- <文件名> <文件名> 命令执行之后,查看暂存区的记录如下图:

image.png

消除最近几次提交

如下图,若要回到‘合并配置的那次提交’应如何操作? image.png 可以使用一非常危险的命令:git reset --hard <id> image.png

gitk 命令查看提交历史树:

image.png

查看不同提交的指定文件的差异

命令:git diff <分支名> <分支名> -- <文件名>;后面的文件名若不写,则是对比两个分支的所有内容差异

删除工作区和暂存区的指定文件

git rm <文件名>

image.png

开发过程中,若临时加了任务,既要保存当前的开发内容,又要处理临时任务,该如何操作?

// 1、先将工作区的内容暂存起来
git stash

// 2、临时任务处理完成之后,在恢复暂存的内容
git stash apply/pop // 作用:a.恢复之前保存的东西到工作区 b.apply不会清除暂存区的记录,pop会清除

如何处理不需要git管理的文件

添加与.git同级.gitignore文件

  • 将不需要git管理的文件或者文件夹名添加进.gitignore文件中

如何fork别人的项目,及同步项目

其实fork很简单,进入项目后,菜单栏的右上角有一个有一个fork的按钮,点击之后就会出来一个选择项,会问你保存在哪里,选择自己对应的保存路径就好了,如下图

image.png 同步项目:就是项目源码更新之后,我们如去更新自己的代码,可以使用网页端手动更新、也可以使用命令更新,我这里就演示使用命令更新

  • 建立远程源码仓库连接
git remote update <项目源码的仓库地址>

示例:image.png

  • 查看是否建立连接成功
git remote -v

image.png

  • fetch命令更新源码
git fetch update

示例: image.png

Tips: 这儿更新是更新到notes/master分支上的,不是直接更新到master分支,但是我查看分支时,并没有notes/master这个分支,后续在研究研究;既然没有直接更新到主分支上,那就要手动合并分支

  • 合并分支

切换到主分支在合并

git merge <待合并分支>

示例: image.png 这样代码就更新了