問題描述:
公司里項目管理使用的是gitLab(收費的), 如果開發人員提交代碼, 需要首先創建一個分支, 然后把代碼提交到你創建的分支上去(不允許把代碼直接提交到主分支上). 在代碼提交到已經創建的分支上后, 你要發送一個merger request的請求 給合並代碼的人員, 這個人有權限把你創建的分支合並到主分支上(你自己是沒有權限的), 有他做最后代碼審核. 如果這個人合並成功后, 自己就可以切換回到主分支, 去更新代碼了.
現在出現一個很棘手的問題(其實還是git提交操作的流程):
目前主分支: master
在msater上創建新分支newBranch, 在newBranch上更改代碼, 沒有提交(commit / push), 此時msater分支上有人更新了代碼, 我需要在newBranch上去更新master代碼, 其實就是更新創建分支的基線(master).
如下圖:
把基線移更新到藍色的線
我目前的操作:(目前的分支是newBranch)
git branch (查看當前分支是否處於newBranch)
git add <file> (提交newBranch上的更改的文件)
git commit -m "comment" (只提交到本地, 不做git push操作, 相當於提交到本地倉庫)
git checkout master
(這里是切換到msater分支, 如果不把newBranch上修改的文件提交到本地, 那么這個操作就會提示錯誤) (切換分支前, 必須保證當前的分支記錄全部提交, 簡單來說, 執行git status, 如果有顯示未提交的修改文件, 那么切換分支就不會成功;這是我們就可以采取把修改的文件提交到本地,不去做git push操作, 然后切分支,做其他事情. 完成之后, 最后切換到之前的分支, 可以通過git reset HARD~1的命令還原.把本地提交的還原回來)
git pull origin master(把master的分支新提交的代碼更新下來)
git checkout newBranch (切換到之前的newBranch分支)
git reset HEAD~1 (這里是先reset, 然后merge)
(上面和下面這兩個步驟操作意義是: 把之前提交到本地, 全部還原回來, 即同時更新了master代碼, 也把基線移到指定的地方, 這樣就相當於(上圖)把基線移到藍線, )
git merge --no-ff master (是否需要加參數--no-ff, 看需要)
(git merge –no-ff 可以保存你之前的分支歷. 能夠更好的查看merge歷史, 以及branch狀態) (git merge 則不會顯示 feature,只保留單條分支記錄)
后續的修改提交文件, 和正常的git add / git commit -m "" / git push 等操作完全不影響
(詳細的內容可以查看我的另一篇博客: http://www.cnblogs.com/xumBlog/p/8623736.html)
(git reset的命令學習: http://www.cnblogs.com/xumBlog/p/8555666.html)