Git 常用命令

本文最后更新于:2021年7月15日 晚上

记录一些最常用的命令(从上往下使用频率依次降低),当然,这里只是吾辈个人的,其他功能可能暂时还没用到呢

详细的 git 相关知识强烈推荐 Pro Git

基本命令

关键词 命令格式 命令解释 命令示例 命令解释
init git init 为当前目录初始化 git 本地仓库
add git add [要追踪的文件/路径] 添加到 git 跟踪 git add -A 追踪仓库目录下的所有文件
commit git commit [路径] [选项] [提交说明] 提交当前的修改内容 git commit -a -m "提交全部的修改" 提交了全部的修改内容(仍在本机)
remote git remote [选项] [远程仓库名] 操作 git 远程仓库 git remote 显示所有远程仓库的别名
git remote add origin https://github.com/rxliuli/rxliuli.github.io.git 为本地仓库关联一个远程仓库
git remote show origin 显示 origin 远程仓库的详细信息
git remote remove origin 删除 origin 远程仓库
push git push [远程别名] [远程分支] 推送本地修改到远程 git push origin master 推送本地修改到远程 origin 的 master 分支上
pull git pull [远程别名] [远程分支] 拉取远程修改到本地 git pull origin master 拉去远程 origin 上 master 分支的修改到本地
status git status 查看本地仓库的状态,以此得知添加和修改的文件
clone git clone [远程仓库地址] 克隆一个远程仓库到本地,这里和 pull 不同点在于本地不存在要克隆的仓库 git clone https://github.com/rxliuli/rxliuli.github.io.git 克隆吾辈的博客 github 仓库到本地
log git log [选项] 查看 git 日志 git log 简单的查看 git commit 历史纪录
revert git revert [提交记录 hash] 撤销掉指定提交 git revert ab1c2d2 撤销一次提交内容,然后将撤销的内容作为修改提交一次,保留了所有的记录
reset git reset [提交记录 hash] 重置到某次提交上,和上面不一样的是不会添加新的提交记录,而是删除已有的提交记录 git reset ab1c2d2 不会在 log 中留下痕迹
git reset HEAD~[N 回退次数] 回退最近几次的提交, N 为几就回退几次 git reset HEAD~1 回退最近一次的提交
branch git branch [分支] git 分支(强大而又复杂的功能) git branch dev 创建 dev 分支
git branch 列出所有分支
git branch dev -D 删除名为 dev 的分支
checkout git checkout [分支名] 切换当前分支(分支之间不共享修改) git checkout master 切换当前分支到 master 分支
git checkout origin/dev -b dev 拉取远程分支到本地并切换
merge git merge [选项] 合并其他分支的修改到当前分支上 git merge dev 合并 dev 分支的修改到当前分支(一般是 master 分支)
git merge origin/master --allow-unrelated-histories 强行合并远程分支到本地
push git push [远程仓库名] :[分支名] 删除掉指定的远程分支(仓库还在,只是删除分支) git push origin :dev 删除远程仓库 origin 下的 dev 开发分支
stash git stash 暂存本地更改
git stash list 查看所有暂存更改
git stash apply [index] 重新应用指定暂存更改 git stash apply 重新应用最新的暂存更改
git stash drop [index] 删除掉指定的暂存更改 git stash drop 删除掉最新的暂存更改

复合命令

撤销掉本地所有的修改

命令

1
git add -A && git stash && git stash drop

解释

  1. 添加所有更改到 git 追踪中(如果没有被忽略的话)
  2. 添加所有本地更改到暂存区域中
  3. 删除掉刚添加的最新暂存更改

应用场景
修改了一些文件但又没有提交,突然发现有问题,想把它们全删除了重来,或者全部回到上次提交,先把这些修改暂存起来(不加最后一条命令)

区分文件名大小写

命令

1
git config core.ignorecase false

解释
Windows 下默认不区分文件名大小写,所以需要特别设置一下。

git push 强制推送

命令

1
git push -f

解释

强制推送到远程分支,即便是远程包含本地不存在的提交

忽略已经跟踪的文件的提交

参考:怎样让 Git 忽略当前已经更改的文件

忽略修改

1
git update-index --assume-unchanged <files>

取消这种设定

1
git update-index --no-assume-unchanged <files>

从远端拉取分支

参考:git 获取远程服务器的指定分支

命令

1
git checkout -b [本地分支名(不存在)] [远程分支名]

示例

1
git checkout -b dev origin/dev

忽略已提交的文件修改

参考:git 如何忽略已经提交的文件 (.gitignore 文件无效)

主要用于忽略一些本地修改的文件但又不希望提交,同时也不希望添加到 .gitignore 中将之从云端排除的方式。

1
git update-index --assume-unchanged [file-pattern]

git 删除远程 tag

显示本地 tag

1
git tag

删除本地 tag

1
git tag -d Remote_Systems_Operation

用 push, 删除远程 tag

1
git push origin :refs/tags/Remote_Systems_Operation

删除远程分支

1
2
git branch -r -d origin/branch-name
git push origin :branch-name

两个 git 仓库合并

现在有两个仓库 kktjs/kktkktjs/kkt-next 我们需要将 kkt-next 仓库合并到 kkt 并保留 kkt-next 的所有提交内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 克隆主仓库代码
git clone [email protected]:kktjs/kkt.git

# 2. 将 kkt-next 作为远程仓库,添加到 kkt 中,设置别名为 other
git remote add other [email protected]:kktjs/kkt-next.git

# 3. 从 kkt-next 仓库中拉取数据到本仓库
git fetch other

# 4. 将 kkt-next 仓库拉取的 master 分支作为新分支 checkout 到本地,新分支名设定为 dev
git checkout -b dev other/master

# 5. 切换回 kkt 的 master 分支
git checkout master

# 6. 将 dev 合并入 kkt 的 master 分支
git merge dev

# 如果第 6 步报错 `fatal: refusing to merge unrelated histories`
# 请执行下面命令 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
git merge dev --allow-unrelated-histories

JetBrains IDE 提供了非常好用的冲突合并工具

在合并时有可能两个分支对同一个文件都做了修改,这时需要解决冲突,对文本文件来说很简单,根据需要对冲突的位置进行处理就可以。对于二进制文件,需要用到如下命令:

1
2
3
git checkout --theirs YOUR_BINARY_FILES     # 保留需要合并进来的分支的修改
git checkout --ours YOUR_BINARY_FILES # 保留自己的修改
git add YOUR_BINARY_FILES

参考: https://segmentfault.com/a/1190000021919753