Git 使用场景速查¶
我想要撤销刚才的一个提交¶
此时如果未push到远程,撤回提交用¶
git reset --soft HEAD~1
此时如果已经push到远程¶
先撤回推送到远程的提交:
git reset --soft <commit ID>然后撤回本地的提交:
git reset --soft HEAD~1再强制覆盖远程:
git push origin main --force(慎用!建议git push origin main --force-with-lease)
–force(蛮力)¶
无条件覆盖远程分支
不管远程分支现在是什么状态
就像”我不管你有什么,我直接覆盖掉”
–force-with-lease(有条件的强制)¶
只有在远程分支和你上次拉取时一模一样的情况下才允许推送
如果远程分支被其他人更新了,会拒绝并报错
就像”如果你和我上次看到的一样,我就覆盖;如果不一样,说明有人改了,我先看看”
我想要合并时接受所有远程的修改,不保留所有本地更改¶
确保你在正确的分支。
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
git clone 太慢,以 zip 下载仓库如何恢复远程完整的 git 追踪状态?¶
# 先初始化git仓库
git init
# 增加远程
git remote add origin git@github.com:leeyorke/deepseek-harness.git
# fetch 记录
git fetch origin
# 当前工作区直接变成 origin/master 的代码
git reset --hard origin/master