2016-10-23 2 views
2

Моя цель состоит в том, чтобы избавиться от одного файла во всех моих фиксаций на GitHub, так что я сделал следующие шаги:Git - разные коммиты, соответственно. (Использование «мерзавец тянуть», чтобы объединить удаленный филиал в вашей)

Я фильтруется мою ветку с этой командой:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch [file_name]' HEAD 

удалить один файл во всех фиксаций и теперь после запуска

git status 

он просит меня вытащить,

[email protected]:/var/www/html/laravel/app_folder$ git status 
On branch master 
Your branch and 'origin/master' have diverged, 
and have 18 and 18 different commits each, respectively. 
    (use "git pull" to merge the remote branch into yours) 
nothing to commit, working directory clean 

, но я не хочу тянуть. Я боюсь, что если я потяну, у меня будет этот файл снова в моих коммитах.

Не должен ли я нажимать его сейчас, чтобы изменения вступили в силу на моем гит-хабе .... я не знаю, что делать.

ответ

3

Да, вы должны нажать ... возможно.

git filter-branch переписывает историю ... кроме того, что она не переписывает ее, она создает новую историю.

Чтобы объяснить, если ваше хранилище было похоже на это, с веткой master на фиксации E, а также в качестве источника.

A -- B -- C -- D -- E [master] 
         [origin/master] 

Тогда после того, как вы запускали git filter-branch эти коммиты будут переписаны в новые коммиты. Но происхождение (на Github) все равно будет таким же.

A -- B -- C -- D -- E [origin/master] 
\ 
    -- B1 - C1 - D1 - E1 [master] 

Они «расходятся». Это то, что вам говорит git status. Ваш master не является ребенком origin/master.

Обычно это означает, что вы внесли локальные изменения в master, в то время как другие люди внесли изменения в master источника. Таким образом, он говорит вам, чтобы вытащить чужие изменения.

Но это неверно. Вы переписываете историю. Итак, вы должны git push вашей новой версии master. Кроме того, git не позволит вам сделать это по соображениям безопасности, так что вам нужно git push --force.

+0

для меня это лучший объясненный ответ, поэтому я принял его как ответ – lewis4u

2

git filter-branch действительно ли это переписывает историю. После того, как вы переписали его, все совершаются с точки зрения расхождения, считаются разными. Вот почему это говорит вам, что у вас есть 18 различных коммитов - точка дивергенции здесь была 18 месяцев назад.

Нельзя объединить ветку, либо сделать резервную копию, а затем перезаписать мастер с помощью git push --force или просто нажать на нее как новую ветку.

+0

Я получил это сейчас после этой команды https://s11.postimg.org/m3gusntxv/Capture.png – lewis4u

+0

Об ошибке см. https://stackoverflow.com/questions/19720711/git-push-warning-questions. Просто используйте 'git push origin master', и все должно быть в порядке. Не забудьте сделать резервную копию сначала, на всякий случай. – sashoalm

+0

Я сделал это ... все в порядке сейчас .... спасибо – lewis4u

2

Конечно, git на github и на вашем локальном компьютере имеют разные истории: один с файлом, один без. Вам нужно:

git push --force 

перезаписать хранилище GitHub.

Смежные вопросы