Я делаю жесткое удаление файла в своем репозитории gitlab. У меня есть 3 ветки, где я хочу, чтобы этот файл был удален из коммитов.
Мое понимание с git не так уж велико
Я выполнил приведенную ниже команду, чтобы полностью удалить любую ссылку на конкретный файл из всех веток в моем репо, и все они были перезаписаны.
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch fileA.sh" -- --all
я запустил, а затем выполнил приведенные ниже команды, чтобы очистить репозиторий на моем локальном компьютере.
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
Ниже приведены ветки, которые у меня есть, наряду с ветками удаленного отслеживания.
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
remotes/origin/mbyousaf2020-master-patch-95874
remotes/origin/test
Однако при запуске git push --all --force
обновляется только главная ветка в моем репо. Как также обновить оставшиеся ветки удаленного отслеживания?
:qabash $ git push --all --force
Enumerating objects: 316, done.
Counting objects: 100% (316/316), done.
Delta compression using up to 12 threads
Compressing objects: 100% (114/114), done.
Writing objects: 100% (314/314), 30.10 KiB | 10.03 MiB/s, done.
Total 314 (delta 195), reused 276 (delta 188)
remote: Resolving deltas: 100% (195/195), completed with 1 local object.
To gitlab.com:qa.git
+ a28475e...40053dd master -> master (forced update)
Какую команду мне нужно запустить, чтобы обновить все мои ветки и полностью удалить любую ссылку на файл во всех моих ветках?
Вы сами дали ответ, когда перечисляли ветки:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
remotes/origin/mbyousaf2020-master-patch-95874
remotes/origin/test
Ветки remotes/origin
не ваши; они являются филиалами удаленного отслеживания. Ты имеет только ветку один — master
. Поэтому git push --all
толкает все ветки, которые у вас есть, а именно эту ветку, master
. Git ведет себя именно так, как ожидалось.
I have 3 branches where i want this file to be removed from the commits.
Нет, не знаешь. Вы сами доказали, что у вас всего одна ветка, а именно master
.
@BilalYousaf: Вы делаете это так же, как делал для мастера, с той лишь разницей, что вам нужно сначала вытащить эти ветки, чтобы они были «своими» (в вашем локальном репозитории git). Чтобы освоиться с этим, вы можете попробовать некоторые главы в git-книге, которая доступна онлайн бесплатно.
Вы должны создать локальную ветку на основе ветки удаленного отслеживания, отредактировать ее и отправить.
На моей машине, если бы я сказал git switch develop
, Git создал бы ветвь develop
на основе ветки удаленного отслеживания origin/develop
и настроил бы последнюю как вышестоящую по отношению к первой.
благодарю за разъяснение. Но тогда какую команду мне запустить, чтобы обновить все ветки отслеживания
remotes/origin
?