2

我有时会遇到这种情况:

  1. 在服务器上,git clone myrepo
  2. 更改foo.sh机器 1 以解决一些问题。
  3. 它可以工作,所以在我的开发机器上复制更改。
  4. 在开发机器上git add foo.sh,,,,git 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',但我想仔细检查我远程所做的更改是否真的相同。

4

2 回答 2

1

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

您可以,但不能通过 git 自动执行。
尽管您可以使用与此类似的脚本,但rm您可以将文件 fromorigin/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
于 2013-10-18T06:12:48.453 回答
1

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

git 文档警告不要对未提交的更改进行拉取和合并;我认为您无法获得您要求的自动行为。

于 2013-10-18T11:11:21.327 回答