simplify the life

Git

  • git config --global merge.conflictstyle diff3(合并冲突的时候,能显示原内容)

合并多个 commit

命令行快速模拟 git 操作:

mkdir test
cd test

echo "0" >> a
git add a
git commit -m "Commit-0"

echo "1" >> a
git add a
git commit -m "Commit-1"

echo "2" >> a
git add a
git commit -m "Commit-2"

echo "3" >> a
git add a
git commit -m "Commit-3"

假设最近的 6 个 commit 分别是(由近及远):

feat: commit 5
feat: commit 4
feat: commit 3
feat: commit 2
feat: commit 1
feat: commit 0
# 交互式处理所有在本地未 push 到远端的 commit
git rebase -i

# 处理最近的 4 个 commit(commit2 ~ commit5)
# HEAD~x 表示最近 x 个
git rebase -i HEAD~4

# 指定 commit 区间(前闭后开)(commit2 ~ commit4)
git rebase -i HEAD~4 HEAD~1

然后进入交互区,将需要合并的 commit 从 pick 改成 s

比如先运行 git rebase -i HEAD~4,然后:(s 会把当前的 commit 合并到之前的 commit)

pick 24e60a8 feat: commit 2
s b6e1a7c feat: commit 3
s 733560b feat: commit 4
s 15be7ed feat: commit 5

如果操作完后,还是在当前分支,则没啥问题,如果出现了另外一个 random hash 的分支(一般就是指定了合并一段 commit)(HEAD 游离态)

比如希望将 commit2 ~ commit4 合并,先运行 git rebase -i HEAD~4 HEAD~1

pick 942fbdc feat: commit 2
s 7b9ea5c feat: commit 3
s 5e5d302 feat: commit 4

操作完后发现在分支 d3ac13f 上,然后通过它 checkout 一个临时分支 git checkout -b tmp

然后回到主分支,操作 git rebase --onto tmp <终点提交>(这个 终点提交 貌似是 tmp 的终点提交),然后还会有冲突需要解决(不知道是不是我操作有问题)

感觉还是直接用 git rebase -i HEAD~4 这样比较方便一点,大不了不处理的 commit 直接原样维持 pick

对于已经 push 到远端的 commit,其他操作类似,做后 git push -f 即可

lock 文件冲突解决

pnpm-lock.yaml 为例:

git add pnpm-lock.yaml
git reset pnpm-lock.yaml
git checkout pnpm-lock.yaml # 全部选择远程?
pnpm install # 然后重新 install 更新 lock 文件

posted on 2022-05-30 09:28  lessfish  阅读(61)  评论(0编辑  收藏  举报

导航