git实用技巧


将几个commit压缩成一个

  1. git log

  2. git rebase -i HEAD~3 (假设你之前有三个提交)

  3. 在打开的文本编辑器中,你会看到列出的提交,默认情况下每行都以 pick 开头。要合并提交,你需要将除了第一个提交之外的其他提交前面的 pick 改为 ssquash。这表示你想要将这些提交合并到它们上面的提交中

    pick e3a1b35 第一个提交
    s 7c3d2c4 第二个提交
    s 4d3e4f5 第三个提交
  4. Git 会打开一个新的编辑器窗口,让你编辑一个新的提交信息,这个信息将用于合并后的提交。这里你可以输入一个新的提交信息,描述这几个提交的整体更改,或者保留其中一个提交的信息。

注意:rebase会导致新的commit节点产生,所以切记不要对多人共用的远端分支进行rebase。

git rebase -i的命令选项:

# 命令说明:
# p, pick<commit> = 使用指定的提交(commit)
# r, reword<commit> = 使用指定的提交(commit),但编辑提交信息
# e, edit<commit> = 使用指定的提交(commit),但在继续之前修改提交内容
# s, squash<commit> = 使用指定的提交(commit),但将其与前一个提交合并
# f, fixup<commit> = 类似 "squash",但丢弃此提交的日志消息
# x, exec<command> = 使用 shell 运行命令(行中的其余部分)
# d, drop<commit> = 移除指定的提交(commit)
# l, label<label> = 用一个名字标记当前的 HEAD
# t, reset<label> = 将 HEAD 重置到一个标签(label)
# m, merge [-C<commit> | -c<commit>]<label> [# <oneline>]
# . 使用原始合并提交的日志消息(如果没有指定原始合并提交,则使用 oneline)创建一个合并提交
# . 使用 -c<commit> 选项可以重写提交信息

找回丢失的commit节点或分支

  1. git reflog 查看你的 Git 操作历史,包括提交、重置、合并等操作。

    这个命令会列出你的 HEAD 指针最近指向的历史,帮助你找到要恢复的提交的哈希值。

  2. git reset --hard [哈希值]

    注意:这个操作是不可逆的,它会丢弃自那个提交以来的所有更改。

  3. git log 查看当前的提交历史,确认你已经成功恢复到了期望的状态。

获得一个干净的工作空间

  1. git status 查看当前的工作目录和暂存区状态,了解哪些文件被修改或未跟踪。

    注意:用 git reset --hard HEADgit checkout -f 来恢复干净工作目录,但这两个操作都会丢失文件,不符合我们使用版本控制的初衷,不推荐。

  2. git stash push -u

    仅仅是临时清理工作目录和暂存区的更改,将它们保存在 Git 的 stash 中,而不是永久删除。这意味着你之前的工作目录的更改还是存在的,只是被临时保存起来了。当你需要恢复这些更改时,可以通过 git stash popgit stash apply 命令来恢复它们到工作目录中。

  3. 如果后面发现这部分变更是需要的,可以执行 git stash popgit stash apply 来恢复。

修改最近一个commit

  1. git log

  2. git show HEAD

  3. git add [修改的文件] 命令将这些文件暂存。如果想要暂存所有修改过的文件,可以使用 git add .

  4. git commit --amend 命令修改最近的提交。这个命令会打开你的默认文本编辑器,允许你修改提交消息。如果你不想修改提交消息,可以直接保存并关闭编辑器。这个命令不仅可以修改提交消息,还可以将新暂存的更改添加到最近的提交中。

    如果你不想修改提交消息,可以添加 --no-edit 选项来保留原来的提交消息。

    git commit --amend --no-edit

    注意:git commit --amend 会替换最后一次提交。如果这个提交已经被推送到远程仓库,你将需要强制推送(git push --force),这可能会影响其他协作者。

    因此,只有在确定没有其他人基于这个提交工作时,才应该使用这个命令。

下面这些命令也是比较实用的命令,感兴趣的同学可以自己学习一下。

  • git bisect 二分查找出现问题的变更节点,比如你发现当前提前下测试是不通过的,但HEAD~10(10个提交前)的测试是可以通过的,就可以用git bisect 来帮你定位到出现问题的变更点。
  • git blame 查看某行代码最后是谁修改的。
  • git show-branch 直观的展示多条分支间的关系。
  • git subtree 拆分或合并仓库。

文章作者: QT-7274
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 QT-7274 !
评论
  目录