2013-10-18 31 views
2

我碰到這個有時:機1上當「本地更改」與傳入合併衝突相同時,git可以合併/拉出檢測嗎?

  1. 在服務器,
  2. 變化foo.sh解決一些問題。
  3. 它的工作原理,所以複製我的開發機器上的變化。
  4. 在開發計算機,git add foo.shgit commitgit push
  5. 在服務器,git pull

    remote: Counting objects: 1, done. 
    remote: Compressing objects: 100% (1/1), done. 
    remote: Total 5 (delta 4), reused 5 (delta 4) 
    Unpacking objects: 100% (5/5), done. 
    From ... 
        c78..e4d master  -> origin/master 
    Updating c78..e4d 
    error: Your local changes to the following files would be overwritten by merge: 
        foo.sh 
    
    Please, commit your changes or stash them before you can merge. 
    Aborting 
    

有沒有辦法了Git可能是一個有點聰明,並注意 「局部變化」與合併更改相同嗎?很明顯,我可以簡單地git reset --hard',但我想仔細檢查一下,我所做的遠程更改是否相同。

回答

1

您可以直接對新樹進行區分。 git diff origin/master將工作目錄與上游更改(剛剛嘗試合併的樹)進行比較,因此應該回答有關更改是否匹配以及是否安全地丟棄本地更改的問題。

git文檔警告不要執行pull操作併合並uncommited更改;我不認爲你能夠獲得你要求的自動行爲。

1

我想仔細檢查一下,我所做的遠程更改是否相同。

你可以,但不能自動通過git。
雖然您可以使用腳本similar to this one,但不是直接執行'rm',您可以將來自origin/yourBranch的文件與當前工作樹(如果rm相同)中的文件進行比較。

# Fetch the newest code 
git fetch 

# Delete all files which are being added, so there 
# are no conflicts with untracked files 
for file in `git diff HEAD..origin/master --name-status | awk '/^A/ {print $2}'` 
do 
    # diff between "$file" and $(git show origin/master:$file) 
done