Git相关¶
- checkout出工作目录
git reset --hard # 影响 HEAD、索引(add后的)和工作目录 git checkout . # 影响工作目录中的未提交更改
- 合并dev指定commit到master
git checkout dev git reset --hard abc1234 git checkout master git merge dev(git merge --squash dev 不带dev提交历史) git push origin master 注意:不能使用 git checkout abc1234 替代 git reset --hard abc1234 1. git reset --hard abc1234: 这个命令会将当前分支(在您的例子中是 dev)的指针移动到指定的 commit(abc1234),并且会丢弃该 commit 之后的所有更改(包括暂存区和工作目录中的更改)。 结果是 dev 分支的历史将被重写,指向 abc1234,并且工作目录将与该 commit 的状态一致。 git checkout abc1234: 这个命令会将工作目录切换到指定的 commit(abc1234),但不会移动当前分支的指针。您将处于一个“分离头指针”(detached HEAD)状态。 在这种状态下,您不能直接在 master 分支上合并 dev 分支,因为 dev 分支的指针没有移动到 abc1234,而是仍然指向原来的 commit。 以下是推荐方法(未测试): # 确保在master分支 git checkout master # 直接cherry-pick指定提交 git cherry-pick abc1234 # 如果有冲突,解决后继续 git add . git commit
- git reset --hard后回到最新提交
# 回到本地最新 git reflog git reset --hard abc1234 # 回到远程最新 git fetch origin git reset --hard origin/main(通过git branch -a命令查看远程分支名)
- 删除最新一次提交
git reset --hard HEAD~1 git push origin 分支名 --force
- 合并dev最新提交到master
git checkout master git merge --squash dev(--squash表示不保留dev提交历史) git commit -m "Merge dev branch changes"(使用--squash需要手动创建一个提交来保存更改)
- 冲突解决方法
# 查看冲突状态 git status # 方法1:打开冲突文件,你会看到类似这样的标记: <<<<<<< HEAD 当前分支的内容 ======= dev分支的内容 >>>>>>> dev # 手动编辑,选择保留哪部分内容,或者合并两部分 # 删除冲突标记 <<<<<<< HEAD, =======, >>>>>>> dev # 方法2:使用git mergetool(如果配置了) git mergetool # 或者使用vscode等IDE的合并工具 # 方法3:选择保留某个分支的版本 # 保留当前分支的版本 git checkout --ours test.py # 或者保留dev分支的版本 git checkout --theirs test.py # 添加解决后的文件 git add test.py # 提交更改 git commit -m "Merge changes from dev branch (squashed)" # 查看提交历史,确认只有一个新的提交 git log --oneline -5