Git常用命令(更新中)

191 阅读3分钟

需要经常处理git,记录一些有点儿麻烦但是有用的。

单独文件回滚

dev分支上修改了A、B文件,将dev分支的文件A回滚到main分支的文件A

  1. 切换到 main 分支 确保 main 分支是最新的,以便回滚时不会丢失任何重要的更改。
git checkout main
git pull origin main  # 或者 git fetch && git merge origin/main
  1. 切换到 dev 分支 切换回 dev 分支,以便你可以访问文件 A
git checkout dev
  1. 找到文件 A 的差异 使用 git diff 命令找到 main 分支和 dev 分支之间的差异。
git diff main..dev -- A

这将显示 dev 分支和 main 分支中文件 A 的差异。

  1. 应用差异到 main 分支 将这些差异应用到 main 分支。你可以使用 git cherry-pick 命令来选择特定的提交,或者使用 git checkout 命令来复制文件。

** 使用 git cherry-pick ** 如果你只想回滚特定的提交:

git cherry-pick <commit-hash>

** 使用 git checkout ** 如果你想复制文件 Adev 分支到 main 分支:

git checkout dev -- A
  1. 添加和提交更改 将更改添加到暂存区并提交。
git add A
git commit -m "Revert changes from dev branch"
  1. 推送更改到远程 main 分支 将更改推送到远程 main 分支。
git push origin main
  1. 验证更改 切换回 main 分支并验证更改。
git checkout main

现在,文件 A 应该已经从 dev 分支回滚到 main 分支。


部分文件分支挪动/分支文件拆分

我在dev分支上修改了A、B、C三个文件并push了,现在希望把A、B文件修改挪到分支main上,挪完后,dev分支上只有C文件修改。

  1. 确保你在 dev 分支上(因为你要从这里提取修改):

    git checkout dev
    
  2. 切换到 main 分支

    git checkout main
    
  3. dev 分支中检出(checkout)A 和 B 文件到 main 分支

    git checkout dev -- A B
    

    这条命令的意思是:从 dev 分支中取出 AB 文件的最新版本,并覆盖当前分支(main)中的对应文件。

  4. main 分支上提交这些更改

    git add A B
    git commit -m "将 A 和 B 文件的修改从 dev 分支移动到 main 分支"
    
  5. 切换回 dev 分支

    git checkout dev
    
  6. dev 分支上移除 A 和 B 文件的修改(即只保留 C 文件的修改):

    你可以使用 git restore(Git 2.23 及以上版本)或者 git checkout 来撤销对 A 和 B 文件的修改。

    • 使用 git restore(推荐):

      git restore A B
      

      这会将 AB 文件恢复到最近一次提交的状态,即移除你在 dev 分支上对它们的修改。

    • 或者使用 git checkout(旧版本 Git):

      git checkout -- A B
      
  7. 验证 dev 分支上只有 C 文件有修改

    git status
    

    应该只显示 C 文件被修改,而 AB 文件已恢复到之前的状态。

本地分支同步远程分支

当代码提交,并通过pull request merge之后,远程的分支就被删除了;希望本地也和远程一样简洁

自动检测并删除远程已删除的本地分支

  1. 得到远程分支最新情况
git fetch --prune
  1. 删除远程已删除但本地仍存在的分支
git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D

3.上面两个请求二合一

git fetch --prune && git branch -vv | awk '/: gone\]/ {print $1}' | xargs -r git branch -D

Prettier 改动的文件

与main分支比较,只Prettier格式化当前分支中变动文件

git diff -z --name-only --diff-filter=ACMR main...HEAD -- src/ | xargs -0 -I {} prettier --write {}

比较工作区与最近一次提交,无论文件是否被add,只要发生变动,就format

git diff --name-only --diff-filter=ACMR HEAD -- src/ | xargs prettier --write