Using Git in Real Projects
Table of Contents
Preface
在这段时间,我实际参与开发了一个项目。在这个过程中,我学习到了一些关于 git 开发的经验,特此做一个记录。
Main
Always branch
除非只是进行一个足够小1 的修改 ,否则一定要新建一个分支来进行开发。
Branch name
分支名字的选择也应该尽心挑选。首先应该根据具体修改的内容命名分支:
- chore: 很多杂活,比如文档的修改,引入新依赖等……
- feat: feature 的缩写,开发增加了一个新的功能。
- fix: fix bug.
How to Merge
不论是个人还是团队开发,在 merge 之前都应该先推送一下分支,然后再 merge。
merge message 也应该填写充足的信息。
- title:
Merge feat/node-definitions - 空行后再写一句描述,比如
Add zustand store + definitions fetch.
Untrack some files
git rm --cached <file>
in Emacs Magit, you can just type K.
revert commit
revert 不会修改历史
git revert <commit-hash>
git push origin dev
reset 会修改历史,需要强制覆盖
git reset --hard <commit-hash>
git push origin dev --force
提交之前记得使用 rebase -i
把修改的记录合并成为每一次提交都是一个完整的有意义的提交。
多人协作开发
本地的开发分支,难免需要同步远端的 main 分支,这个时候我们有需要使用 rebase 把我们的修改插在 main 分支的最新提交记录上面。
# 1. 切换到 main 分支并拉取最新代码 git checkout main git pull origin main # 2. 切换回你的开发分支 git checkout dev # 3. 执行变基(将 dev 的地基拔起到 main 的最新位置) git rebase main # --> 【注意】如果发生冲突,变基过程会暂停。 # 你需要手动解决冲突,然后执行以下命令(注意这里千万不要执行 git commit): # git add . # git rebase --continue # (Git 会逐个应用你的提交,如果有多个提交冲突,可能需要重复上述解决冲突的步骤) # 4. 强制推送到远程 # 【核心差异】因为 rebase 改写了本地 dev 的提交历史(底层哈希值变了), # 如果你的 dev 分支之前已经 push 过,现在直接 push 会报错。必须使用强制推送。 git push --force-with-lease origin dev # (使用 --force-with-lease 比单纯的 -f 更安全,它会检查是否覆盖了别人推送到 dev 的代码)
没错,直接 rebase 主分支就好,就是这么简单。注意 rebase 如果想要合并到其他分支,必须保留分支时的那个节点。
modify commit
rebase edit
Footnotes:
1
单文件、单行或连续多行的修改。更准确的说是基于 commit 信息和使用 git
diff 可以轻松了解修改内容。