项目

一般

简介

Git相关

  1. checkout出工作目录
    git reset --hard # 影响 HEAD、索引(add后的)和工作目录
    git checkout .   # 影响工作目录中的未提交更改
    
  2. 合并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
    
  3. git reset --hard后回到最新提交
    # 回到本地最新
    git reflog
    git reset --hard abc1234
    
    # 回到远程最新
    git fetch origin
    git reset --hard origin/main(通过git branch -a命令查看远程分支名)
    
  1. 删除最新一次提交
    git reset --hard HEAD~1
    git push origin 分支名 --force
    
  2. 合并dev最新提交到master
    git checkout master
    git merge --squash dev(--squash表示不保留dev提交历史)
    git commit -m "Merge dev branch changes"(使用--squash需要手动创建一个提交来保存更改)
    
  3. 冲突解决方法
    # 查看冲突状态
    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