Github工作流|8月更文挑戰

唯依綰青絲發表於2021-08-01

前言

Github工作流是一個基於分支的、支援團隊協作的效率工程。我們可以在工作中,很方便的合併、review他人程式碼,並且可以清晰的看到提交記錄,方便程式碼回滾。

很多網際網路企業都已經採用這種多人協同的開發方式,真的非常爽,誰用誰知道。

github工作流

通過如下工作流,可以很輕鬆的完成功能提交, 並且還可以讓合併程式碼的人輕鬆review、comment.

graph TD
fork到自己倉庫.. --> 建立功能分支... --> 提交點程式碼到功能分支... --> create-pull-request....

如下為React倉庫中的某個pr image.png

工作流常見問題彙總

1. 原生程式碼太久遠,需要更新

當然不是每個pr都是一番風順的。比如你的功能分支已經寫了幾個月了, 此時你本地的程式碼相對於遠端倉庫來說就太久遠了,如果不更新的話,可能會導致有很多衝突。

需要在你的功能分支上再拉一次遠端程式碼。

graph TD
git_pull_upstream_master..... --> create_pull_request....

細心的同學可能會發現, 在你這次pr的commit裡,包含了主分支的commit。


3an4js2 feature: xxx
3an4js2 master commit three
3an4js2 master commit two
3an4js2 master commit one

複製程式碼

這是因為git pull 相當於把遠端倉庫的的程式碼合併到你本地倉庫了,自然就有這些commit了。

那有沒有辦法使 既能更新原生程式碼 又 沒有這些不屬於我的commit 呢?

graph TD
1.git_fetch_upstream_master...... --> 2.git_rebase_upstream/master...... --> 3.git_push_-f...

rebase 相當於把當前分支的修改 拼接在 最新的master後面, 如下mywork分支的c5,c6就直接拼接在了origin後面, 沒有多餘的提交記錄

pull=fetch+merge, merge會把origin的commit 合併到你的分支裡。這也是pr裡會顯示主分支的commit的原因。

image.png

2. rebase | merge 出現衝突

git rebase upstream/master
get merge master
複製程式碼

rebasemerge 都有可能產生衝突

如果是rebase產生衝突

  • 我們修改完衝突,只用git add,
  • git rebase --continue就可以了

merge產生衝突

  • 重新走一遍提交流程

3. 合併多個commit為1個

有時候,我們要提交的功能很複雜,可能會產生多個commit, 但是在提交pr的時候,只需要一個彙總的commit 就可以了,這個要怎麼做呢?

例如:

  • 1: 我的第4次提交
  • 2: 我的第3次提交
  • 3: 我的第2次提交
  • 4: 我的第1次提交
  • 5: feat: ...

將這1 - 4提交合併為一個

我們可以將當前git指標 指到倒數第五次提交,這樣1 ~ 4次提交就變為未提交狀態.

git reset 2as4cjd4(commitId)

再重新add, commit 就可以了
複製程式碼

4.如何將程式碼切換到別人的pr

  • 先找到pr的id
  • git fetch upstream pull/id/head:temp
  • git checkout temp

這個命令就是 將遠端id為..的pr拉取到本地的temp分支,切換到temp分支就可以看到遠端的pr了

相關文章