git合并/拉取是否可以检测到“何时”;本地更改“;是否与传入的合并冲突相同?

git合并/拉取是否可以检测到“何时”;本地更改“;是否与传入的合并冲突相同?,git,git-merge,git-pull,Git,Git Merge,Git Pull,我有时会遇到这样的情况: 在服务器上,git clone myrepo 更改机器1上的foo.sh,以解决某些问题 它是有效的,所以在我的开发机器上复制更改 在开发机器上,git add foo.sh,git commit,git push 在服务器上,git pull remote: Counting objects: 1, done. remote: Compressing objects: 100% (1/1), done. remote: Total 5 (delta 4), reuse

我有时会遇到这样的情况:

  • 在服务器上,
    git clone myrepo
  • 更改机器1上的
    foo.sh
    ,以解决某些问题
  • 它是有效的,所以在我的开发机器上复制更改
  • 在开发机器上,
    git add foo.sh
    git commit
    git push
  • 在服务器上,
    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
    ,但我想再次检查一下,我远程所做的更改是否真的是相同的

    我想再次检查我远程所做的更改是否真的相同

    您可以,但不能通过git自动执行。
    尽管您可以使用脚本,但除了不直接执行“
    rm
    ”之外,您可以将
    origin/yourBranch
    中的文件与当前工作树中的文件(如果相同,则使用rm)进行比较


    您可以直接与新树进行比较
    git diff origin/master
    将工作目录与上游更改(您刚刚尝试合并的树)进行比较,因此应该回答您关于更改是否匹配以及丢弃本地更改是否安全的问题

    git文档警告不要使用未限制的更改进行拉取和合并;我认为你无法获得你所要求的那种自动行为

    # 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