undefined

Git 使用方法

1. 比较两个版本之间的区别

1
2
3
4
5
6
7
8
1. 查看当前没有 add 的内容修改
git diff
2. 查看已经 add 但没有 commit 的改动
git diff --cached
3. 查看任意两个版本之间的改动
git diff 版本1 版本2
4. 查看两个版本的 src 文件夹的区别
git diff 版本1 版本2 src

2. 提交

1
2
3
4
5
1. 查看commit内容
git show commit_id

2. 查看最近n次提交的修改,指定n为1则可以查看最近一次修改的内容
git log -p -n

3. 子项目

1
2
3
4
5
6
7
8
9
10
# clone 的时候就拉取子模块
git clone --recurse-submodules xxx
git clone --recursive xxx

# 子项目初始化
git submodule update --init --recursive

# 子项目更新
git submodule foreach --recursive git checkout master
git submodule foreach git pull

4. 分支

1
2
3
4
5
6
# git 分支重命名
git branch -m old_branch_name new_branch_name

# 合并 dev 分支上的某一个 commit 到 master
git checkout master
git cherry-pick commit-id

5. 删除具体某个 commit 方法

1
2
3
4
1. git log  # 获取 commit 信息
2. git rebase -i <commit-id> # commit-id 是要删除的 commit 的之前的那个 commit-id
3. 编辑文件,将要删除的 commit 之前的单词改为 drop
4. 保存文件即可

6. 合并多个 commit

1
2
3
4
5
6
7
8
9
10
11
12
13
# 第一种方法
# 从 HEAD 版本开始往过去数 3 个版本
git rebase -i HEAD~3

# 第二种方法
# 指定要合并的 commit 之前的 commit(不参与合并)
git rebase -i <commit-id>
执行完会弹出一个窗口,将需要合并的 commit 前的 pick 改为 squash 或者 s。之后保存关闭即可。
pick 3ca6ec3 '注释**********'
s 1b40566 '注释*********'
s 53f244a '注释**********'

然后会出现编辑窗口,需要编辑提交信息,编辑完保存退出即可。

如果想放弃这次压缩,可以执行:git rebase --abort

7. 删除 git 暂存区的文件

1
2
git rm -r --cached 文件名
git reset HEAD 文件名 # 回退到最近一次 push 后的状态并清空暂存区,但是工作区修改的内容ye hui

8. 将本地分支关联到远程分支

1
2
3
4
# 设置 remote
git remote add origin git@...
# 将本地分支关联到远程分支
git branch --set-upstream-to=origin/dev dev

9. 比较两次 commit 之间的差异文件

1
2
3
4
# 查看 hash1 和 hash2 两次 commit 之间的差异
git diff hash1 hash2 --stat
# 查看 hash1 和 hash2 两次 commit 中 file_name 的差异
git diff hash1 hash2 file_name

10. 只 cherry-pick 一个 commit 中某几个文件而不是全部

1
2
3
4
5
6
7
8
# -n,--no-commit  不自动提交
git cherry-pick -n commit_id

# 如果 commit 里面有多个文件,执行此命令后需要先 unstage 并恢复不想要改动的文件
git reset HEAD <file_name>
git checkout -- <file_name>

# 这种方法会丢弃原作者及其相关的 commit message

11. revert 操作

1
2
3
4
# 撤销指定的提交
git revert <commit>
# 这是一个 前开后闭 区间,即不包括 commit-1,但包括 commit-2
git revert --no-commit <commit-1>..<commit-2>