天天看點

Git強制更新本地庫和沖突解決

本地有修改和送出,如何強制用遠端的庫更新。

出現這種情況一般是git本地有commit,但是不能更新,也不能cleanup,導緻無法push到伺服器。

使用git pull -f 強制更新,仍然提示 you have not concluded your merge. (merge_head exists)。

這種情況,可以做好備份,放棄本地修改,用遠端内容reset本地目錄,當然建立目錄重新clone也可以。

以下是使用reset指令使用遠端内容強制更新本地目錄,

git fetch 下載下傳遠端的庫的内容,不做任何的合并,git reset 把head指向剛剛下載下傳的最新的版本。

注意,這樣操作,之前所做的修改會被覆寫!!!謹慎使用!

git fetch --all

git reset --hard origin/master(根據本地版本)

在使用git pull代碼時,經常會碰到有沖突的情況,提示如下資訊:

error: your local changes to "xxx.file" would be overwritten by merge. aborting.

please, commit your changes or stash them before you can merge.

即将更新下來的内容和本地修改的内容有沖突,先送出你的改變或者先将本地修改暫時存儲起來。

一般來說遇到這種情況,首先commit本地的修改,

然後pull版本庫的代碼,修改發生沖突的檔案,就可以正常merge和push操作了。

這裡git為什麼會提示在merge之前做這些操作呢?

merge manual中有一條警告:

warning: running git merge with uncommitted changes is discouraged:

while possible, it leaves you in a state that is hard to back out of in the case of a conflict.

有未送出修改情況下,不要執行merge,很可能會丢失修改。

看一下如何使用stash暫存代碼:

1、先将本地修改存儲起來

這樣本地的所有修改就都被暫時存儲起來 。是用git stash list可以看到儲存的資訊:

Git強制更新本地庫和沖突解決

git stash暫存修改

其中stash@{0}就是剛才儲存的标記。

2、pull内容

暫存了本地修改之後,就可以pull了。

3、還原暫存的内容

系統提示如下類似的資訊:

意思就是系統自動合并修改的内容,但是其中有沖突,需要解決其中的沖突。

4、解決檔案中沖突的的部分

打開沖突的檔案,會看到類似如下的内容:

Git強制更新本地庫和沖突解決

其中updated upstream 和=====之間的内容就是pull下來的内容,====和stashed changes之間的内容就是本地修改的内容。

碰到這種情況,git也不知道哪行内容是需要的,是以要自行确定需要的内容。