git命令詳解( 四 )
此篇為git命令詳解的第四篇,話不多說,我們直接上知識點好吧
gitPush:
此命令 負責將你的變更上傳到指定的遠端倉庫,並在遠端倉庫上合併你的新提交記錄。一旦 git push
完成, 你的朋友們就可以從這個遠端倉庫下載你分享的成果了!你可以將 git push
想象成釋出你成果的命令, 注意: git push
不帶任何引數時的行為與 Git 的一個名為 push.default
的配置有關。它的預設值取決於你正使用的 Git 的版本
執行命令:git push
好了,git push 命令沒什麼可以提交的
我們接下來看一個比較複雜一點的問題
偏離的工作:
假設你週一克隆了一個倉庫,然後開始研發某個新功能。到週五時,你新功能開發測試完畢,可以釋出了。但是 —— 天啊!你的同事這周寫了一堆程式碼,還改了許多你的功能中使用的 API,這些變動會導致你新開發的功能變得不可用。但是他們已經將那些提交推送到遠端倉庫了,因此你的工作就變成了基於專案 舊版 的程式碼,與遠端倉庫最新的程式碼不匹配了。
這種情況下, git push
就不知道該如何操作了。如果你執行 git push
,Git 應該讓遠端倉庫回到星期一那天的狀態嗎?還是直接在新程式碼的基礎上新增你的程式碼,異或由於你的提交已經過時而直接忽略你的提交?
因為這情況(歷史偏離)有許多的不確定性,Git 是不會允許你 push
變更的。實際上它會強制你先合併遠端最新的程式碼,然後才能分享你的工作。
下面我們看一下實際的例子
執行命令:git Push
看見了吧?什麼都沒有變,因為命令失敗了! git push
失敗是因為你最新提交的 C3
基於遠端分支中的 C1
。而遠端倉庫中該分支已經更新到 C2
了,所以 Git 拒絕了你的推送請求
那該如何解決這個問題呢?很簡單,你需要做的就是使你的工作基於最新的遠端分支。
有許多方法做到這一點呢,
方案一
不過最直接的方法就是通過 rebase 調整你的工作。咱們繼續,看看怎麼 rebase!
執行命令:git fetch
git rebase o/master
git push
我們用 git fetch
更新了本地倉庫中的遠端分支,然後用 rebase 將工們的工作移動到最新的提交記錄下,最後再用 git push
推送到遠端倉庫。
方案二
還有其它的方法可以在遠端倉庫變更了以後更新我的工作嗎? 當然有,我們還可以使用 merge
儘管 git merge
不會移動你的工作(它會建立新的合併提交),但是它會告訴 Git 你已經合併了遠端倉庫的所有變更。這是因為遠端分支現在是你本地分支的祖先,也就是說你的提交已經包含了遠端分支的所有變化。
執行命令:git fetch
git merge o/master
git push
方案三
很好!但是要敲那麼多命令,有沒有更簡單一點的?
當然 —— 前面已經介紹過 git pull
就是 fetch 和 merge 的簡寫,類似的 git pull --rebase
就是 fetch 和 rebase 的簡寫!
讓我們看看簡寫命令是如何工作的。
執行命令:git pull --rebase
git push
方案四
我們也可以使用git pull 來解決這個問題
執行命令:git pull
git push
偏離的歷史是非常重要的一部分,希望大家能好好看一下子