[TOC]
https://trello.com/
# 分支操作
```
git branch -vv # 查看本地分支
git branch -a # 查看遠程分支,會用紅色表示出來(如果你開了顏色支持的話)
git checkout -b feature/dev1 origin/dev # 新建并切換本地分支 dev1,并 checkout 以及跟蹤遠程分支dev 分支
git branch -d branch-name # 刪除本地分支
git branch -r -d origin/branch-name # Deleted remote-tracking branch origin/branch-name (was 61d9e0d)
git push origin --delete branch_name # 刪除遠程分支
git branch -m branch-name new-branch-name # 重命名本地分支
```
如果遠程新建了一個分支,本地沒有該分支:
```
git checkout --track origin/branch_name
```
這時本地會新建一個分支名叫?`branch_name`?,會自動跟蹤遠程的同名分支?`branch_name`。
如果本地新建了一個分支 branch_name,但是在遠程沒有,這時候?push 和 pull?指令就無法確定該跟蹤誰,一般來說我們都會使其跟蹤遠程同名分支,所以可以利用:
~~~
git push --set-upstream origin branch_name
~~~
這樣就可以自動在遠程創建一個?`branch_name`?分支,然后本地分支會?track?該分支。后面再對該分支使用 push 和 pull 就自動同步。
合并分支到 master 上
~~~
git checkout master
git pull origin master # pull 遠程 master 上的代碼
git merge dev # 合并 dev 分支的代碼到 master
~~~
然后查看狀態
~~~
git status
~~~
> [git本地分支與遠程分支關聯與解除關聯](https://www.jianshu.com/p/526eb3eec83e)
## 避免合并時產生沖突問題
開發中經常會遇到這種使用場景
版本發布的代碼在`dev_6.0`上,但是個人開發分支在`feature_6.0`上。
* 需求1 開發完成后,需要將`feature_6.0`合并到`dev_6.0`上。
* 需求2 開發完成后,同樣的情況也需要將`feature_6.0`合并到`dev_6.0`上。
問題在于需求開發的過程中,合作小伙伴也同樣會有很多代碼合并到 `feature_6.0`。這種情況下,合并之前,`dev_6.0`就會比你自己的 `feature_6.0`多出很多提交。
為了保持兩個分支同步,避免合并時產生沖突問題:
我們需要在合并前,將`dev_6.0`的代碼同步到 `feature_6.0`,保持兩個分支都是最新的,然后將`feature_6.0` merge 到 `dev_6.0`,這樣就不會有沖突了。
```
# === dev_6.0 的代碼同步到 feature_6.0 ===
git checkout dev_6.0
git pull --rebase origin dev_6.0 #拉取 dev_6.0 最新的代碼
git checkout feature_6.0 #切換到 feature_6.0
git rebase dev_6.0 #同步 dev_6.0 的代碼到 feature_6.0
# === 將開發的代碼 merge 到 dev_6.0上 ===
git checkout dev_6.0 #切換分支到 dev_6.0
git merge feature_6.0 #合并 feature_6.0到 dev_6.0
```
# 恢復被刪除文件
(2)對于要撤銷的文件,你已經有了commit的記錄了。
則先:`git reset HEAD XXX_file`讓該文件回到工作區的狀態。
然后:`git chekcout -- XXX_file`即可
# git pull 放棄本地修改, 全部使用遠端代碼
```
# git強制覆蓋:
git fetch --all
git reset --hard origin/master
git pull
## git 強制覆蓋本地命令(單條執行):
git fetch --all &&?git reset --hard origin/master &&?git pull
```
第一個是:拉取所有更新,不同步;
第二個是:本地代碼同步線上最新版本(會覆蓋本地所有與遠程倉庫上同名的文件);`git reset`指令把`HEAD`指向`master`最新版本
第三個是:再更新一次(其實也可以不用,第二步命令做過了其實)
> [Gitflow實踐](https://blog.csdn.net/sweetvvck/article/details/50245147)
# 如何為一個項目貢獻代碼
參考:https://github.com/keepassxreboot/keepassxc/blob/develop/.github/CONTRIBUTING.md
# 保持你的 fork 項目處于最新
[Keeping your fork up to date](https://garrytrinder.github.io/2020/03/keeping-your-fork-up-to-date)
# 參考
> https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424
[Git本地分支和遠程分支關聯](https://www.cnblogs.com/chechen/p/9950798.html)
[Git Flow精簡模型](http://blog.gejiawen.com/2016/12/12/git-flow-compact-model/)
http://www.360doc.com/content/16/0920/16/1073512_592297709.shtml
- 介紹
- 1. Get Git - 安裝并且設置Git
- 2. Repository - 建立一個本地的repository
- 3. Commit to it - 檢查狀態、新增或修改commits
- 4. GitHubbin - 注冊GitHub帳號
- 5. Remote Control - 將repository做本地和遠程的連接
- 6. Forks and Clones - Fork和clone一個開源的計劃
- 7. Branches aren't just for Birds - 建立一個feature branch
- Git分支開發模型
- 8. It's a Small World - 邀請并和別人合作
- 9. Pull, Never Out of Date - 利用Push和pull來和GitHub.com同步
- 10. Requesting You Pull Please - 建立一個pull request
- 11. Merge Tada - Merge和刪除branches
- 學會 GitHub
- GitHub 使用指南
- git 與 github 模板配置
- GitHub Actions
- 實用技巧
- Git Flow
- Submodule子模塊
- 工作記錄
- 常用命令
- 幫助
- 資源
- 解疑答惑