2013-10-18 2 views
2

는 가끔이로 실행 : 기계 1"local changes"가 들어오는 병합 충돌과 동일한 경우 git merge/pull 탐지가 가능합니까?

서버에서
  1. ,
  2. 변경 foo.sh을 몇 가지 문제를 해결하기 위해.
  3. 내 개발 컴퓨터에서 변경 사항이 적용되므로 작동합니다. dev에 기계, git add foo.sh, git commit
  4. , 서버에서 git 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 reset --hard '일 수 있었다, 그러나 나는 원격으로 만든 변화가 진짜로 동일하다는 것을 두번 확인하고 싶으면.

답변

1

새 트리에 대해 직접 비교할 수 있습니다. git diff origin/master은 작업 디렉토리를 업스트림 변경 (방금 병합을 시도한 트리)과 비교하여 변경 사항이 일치하는지 여부와 로컬 변경 사항을 버릴 수 있는지 여부에 대한 질문에 대답해야합니다.

git 문서는 커밋되지 않은 변경 사항을 가져 오거나 병합하지 않도록 경고합니다. 나는 당신이 요구하는 자동적 인 행동을 취할 수있을 것이라고 생각하지 않는다.

1

원격 변경 사항이 실제로 동일한 지 다시 한 번 확인하고 싶습니다.

git를 사용할 수는 있지만 자동으로 수행 할 수는 없습니다.
'rm'을 직접 수행하는 대신 origin/yourBranch의 파일을 현재 작업 트리의 파일 (및 동일한 경우 rm)과 비교할 수 있다는 점을 제외하고는 similar to this one 스크립트를 사용할 수 있습니다.

# 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