git命令詳解( 四 )
此篇為git命令詳解的第四篇,話不多說,我們直接上知識點好吧
git Push
偏離的工作
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
偏離的歷史是非常重要的一部分,希望大家能好好看一下子
git命令詳解( 四 )