¿Por qué git stop commit cuando se cambió otro file?

Tengo un proyecto en git, supongo que tiene los siguientes files:

HelloWorld.java README.md pom.xml 

Edito / README.md usando el editor de Github; No hay problema. Luego, en eclipse usando eGit, edito HelloWorld.java , pero cuando bash enviar y enviar ese file, aparece un error: non-fast-forward . A less que Pull primero, no puedo enviar el file java. ¿Por qué es este el caso? Usando SVN nunca tuve un problema así. ¿Por qué Git no me permite enviar un file cuando se cambia algún otro file no relacionado en el proyecto? Leí sobre esto pero todavía no entiendo la razón detrás del problema.

Por cierto, estoy haciendo todos los cambios en el master por ahora.

Eso es porque git se está asegurando de que su repository esté actualizado con el maestro antes de realizar cambios. El problema es empujar, no cometer. No puede presionar a un repository para el que no haya obtenido todos los cambios. Lo que puede hacer es crear una nueva twig con sus cambios y combinarla con el maestro más tarde si así lo desea, ese es el sistema que git usa para lo que quiere hacer.

Un server SVN hará algunos types de fusiones por sí mismo, particularmente cuando los cambios se realizan en diferentes files como en su caso. Como SVN representa twigs y tags como diferentes partes de un solo tree y un único repository puede contener múltiples proyectos no relacionados, esto es necesario.

Pero git nunca hará una fusión en el server. Y dado que una confirmación representa todo el tree, su situación es una combinación a pesar de que ningún file fue modificado por ambas partes y debe fusionarse.

Aunque los cambios están restringidos a diferentes files, garantiza que no habrá conflictos textuales entre ellos, aún puede haber conflictos semánticos. Imagínese si está trabajando en un cambio a una function de biblioteca que requiere que se modifiquen todas las personas que llaman, y antes de presionar ese cambio, otro desarrollador agrega un nuevo file que contiene una nueva llamada a esa function. Si ese nuevo file es el único cambio que realizó el otro desarrollador, SVN le permitirá confirmar sus cambios y manejar la fusión en el server, aunque eso hará que el código se rompa. Al exigir que todas las fusiones se realicen bajo el control del desarrollador, al less al less Git ofrece la oportunidad de atrapar este tipo de conflicto; aunque en muchos casos un desarrollador solo puede realizar una combinación automática e impulsar los resultados sin ninguna comprobación.