     @fileSubscriptions = new CompositeDisposable
 
     @fileSubscriptions.add @file.onDidChange =>
-      @onDidFileChange()
+      @conflict = true if @isModified()
+      previousContents = @cachedDiskContents
+
+      # Synchrounously update the disk contents because the {File} has already cached them. If the
+      # contents updated asynchrounously multiple `conlict` events could trigger for the same disk
+      # contents.
+      @updateCachedDiskContentsSync()
+      return if previousContents == @cachedDiskContents
+
+      if @conflict
+        @emitter.emit 'did-conflict'
+        @emit "contents-conflicted"
+      else
+        @reload()
 
     @fileSubscriptions.add @file.onDidDelete =>
       modified = @getText() != @cachedDiskContents

    @fileSubscriptions.add @file.onDidRename =>
      @emitter.emit 'did-change-path', @getPath()
      @emit "path-changed", this

  onDidFileChange: ->
    @conflict = true if @isModified()
    previousContents = @cachedDiskContents

    # Synchrounously update the disk contents because the {File} has already cached them. If the
    # contents updated asynchrounously multiple `conlict` events could trigger for the same disk
    # contents.
    @updateCachedDiskContentsSync()
    return if previousContents == @cachedDiskContents

    if @conflict
      @emitter.emit 'did-conflict'
      @emit "contents-conflicted"
    else
      @reload()

  # Identifies if the buffer belongs to multiple editors.
  #


    @file.setEncoding(@encoding)
    unless @isModified()
      @updateCachedDiskContents true, =>
        @reload() unless @isModified()

  # Public: Returns the {String} encoding of this buffer.
  getEncoding: -> @encoding ? @file.getEncoding()
