Git 使用场景速查

我想要撤销刚才的一个提交

此时如果未push到远程,撤回提交用

git reset --soft HEAD~1

此时如果已经push到远程

  • 先撤回推送到远程的提交:git reset --soft <commit ID>

  • 然后撤回本地的提交: git reset --soft HEAD~1

  • 再强制推送到远程: git push origin main --force

我想要合并时接受所有远程的修改,不保留所有本地更改

  • 确保你在正确的分支。git checkout <branch name>

  • 拉取远程更改。git fetch origin.

  • 重置到远程分支。git reset --hard origin/<branch name>

误将最新的一个提交撤回了,此时本地还有未提交的更改,如何解决?

  • 查看 git reflog

  • 使用 git stash 保存当前更改。git stash push -m <stash message>。此时会将所有更改保存到给 git 的 stash 中。

  • 执行 git cherry-pick <你想要恢复的commit id>

  • 还原提交到 stash 中的更改。git stash pop

Note

选择一个commit 应用到当前分支。git cherry-pick <cimmit id>

我想用dev分支的a.c文件覆盖main分支的a.c文件,如何做?

  • 切换到 main 分支。git checkout main

  • 替换 git restore --source=dev a.c

我想比较main分支和dev分支有多少文件差异

输入

git diff main dev --stat

输出

1396@work03 xs9933.sdk]$ git diff main dev --stat
.gitignore                       |    1 +
build/Makefile                   |   16 +-
include/ni_comm_mci.h            |    8 +-
include/sdk_mci.h                |   17 +-
sample/build/Makefile            |    3 +-
sample/include/cmd.h             |    1 +
sample/include/sample_comm_mci.h |    2 +-
sample/include/sample_reg_cfg.h  |    5 +-
sample/src/i2c_rw.c              |   94 +++---
sample/src/sample_comm_mci.c     |  339 +++++++++++++++-----
sample/src/sample_main.c         |  125 ++++++--
src/mci.c                        |  264 +++++++++++-----
src/mci.h                        |  102 ++++--
src/mci_data.c                   | 1257 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
src/mci_data.h                   |   62 +++-
src/mci_drv.c                    | 2821 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
src/mci_drv.h                    |   26 +-
17 files changed, 4237 insertions(+), 906 deletions(-)
[1396@work03 xs9933.sdk]$

我想要快速查看远程是否更新

git fetch origin

# 查看当前分支是否领先/落后远程(粗略查看)
git status

# 查看远程新增了哪些提交(详细查看)
git log HEAD..origin/main --oneline