--amend
во время rebase
.git commit --amend
не создает новый коммит, а перезаписывает предыдущий.rebase
на каждом шаге делаете --amend
, вы по сути всё время заменяете один и тот же коммит. Остальные коммиты, которые Git должен был «применить» в процессе ребейза, просто исчезают, потому что их заменили.rebase -i
вместо amend
нужно:git add <файлы> # главное проиндексировать правки файлов
git rebase --continue # тут гит уже сам сделает git commit --no-edit
Вручную делать git commit
перед continue
имеет смысл только если вы хотите поменять ещё и сообщение коммита.reflog
— журнале ссылок.git reflog
git reset --hard <хеш_из_reflog>
#!/bin/bash
# === Настройки ===
COUNT=10
NEW_DATE="2025-03-27T17:00:00"
# === Автоматическая замена pick на edit ===
export GIT_SEQUENCE_EDITOR="sed -i 's/^pick /edit /'"
# === Старт интерактивного rebase ===
git rebase -i HEAD~$COUNT
# === Цикл по каждому коммиту с изменением даты ===
while ! git rebase --continue 2>/dev/null; do
GIT_COMMITTER_DATE="$NEW_DATE" git commit --amend --no-edit --date "$NEW_DATE"
done
echo
echo "✅ Все $COUNT коммитов переписаны с новой датой: $NEW_DATE"
echo " Не забудь сделать принудительный push: git push --force"
liquibase diff
, generateChangeLog
). Это может автоматически сгенерировать changesets. Не всегда идеально, особенно для данных, но может служить хорошей стартовой точкой.change_id
git checkout develop # удостовериться что мы в нужной ветке
git merge --ff $(git commit-tree -p develop -p master -m "Reset develop to master" master^{tree})
master^{tree}
— это ссылка на текущее состояние файлов из ветки master.git commit-tree
— создаёт новый коммит, который:git commit-tree -p develop -p master -m "Reset develop to master" master^{tree}
— эта команда не просто создаст новый коммит, но ещё вернёт его хеш.git merge --ff $(...)
--ff
(fast-forward) говорит гиту просто передвинуть указатель develop вперёд на этот новый коммит, если это возможно без создания нового коммита слияния.$(...)
— это подстановка команды в bash, то есть git merge --ff
получит на вход хеш коммита из предыдущего шага.Создаю на сервере репозиторий git init. Создаю у себя репозиторийДля чего? Вы создали две отдельные истории. Даже если в обоих случаях получилась ветка с названием main, это всё равно будут разные ветки без общей истории. Не нужно так делать. Репозиторий следует создавать в одном месте, а затем уже клонировать в другие.
Ни пуш ни пулл не работают.
Merge remote-tracking branch 'refs/remotes/origin/' into
моя ветка приняла все изменения с удаленного репозитория и происходит слияние в моей ветке?
моя ветка поглащает origin и станет основной
git fetch --unshallow
git fetch --all
git fetch origin updater --depth=1
git checkout updater
/
в конце пути не влияет на работу). Permission to kirill-pereshyvalov-13/laravel-docker.git denied to KirillPereshyvalov13— вероятно, вы вошли не под тем аккаунтом, который имеет доступ к репозиторию.
echo "url=https://github.com" | git credential reject
__pycache__/
у меня не связывается папка B2 c репозиторием с гитхаба
.
└───yyy.loc
├───.git
└───packages
├───.git # пустой репо созданный git init
└───B2
└───.git
git config pull.rebase false # merge
git pull --rebase
rm -rf ".git"
git add .
а индексировать только нужные файлы. # Клонировать репозиторий с фильтром, чтобы не загружать все файлы сразу
git clone --filter=blob:none --sparse https://example.com/repo.git
cd repo
# Инициализировать выборочную загрузку
git sparse-checkout init --no-cone
.git/info/sparse-checkout
:# включить все файлы
/*
# кроме одной папки
!/node_modules/
# Докачать всё, кроме папки node_modules
git sparse-checkout reapply
node_modules
. Вы сможете работать с репозиторием, не загружая лишние данные. Если потребуется вернуть node_modules
, достаточно удалить соответствующее правило из файла sparse-checkout
и снова выполнить git sparse-checkout reapply
по мнению status никаких неотслеживаемых файлов нет, а по мнению pull есть неотслеживаемые файлы которые будут перезаписаны. Как так?
А вот кстати и коммит который пытаюсь спулить:
[htdocs]$ git status
Что может быть не так?
git add --all .
git commit -am "..."
git remote set-url origin git@gitlab.com:malashko/bla-bla-bla.git
git reset --hard
git restore --source=хеш_коммита --staged --worktree .
--source=хеш_коммита
, вы говорите Git использовать содержимое файлов из этого коммита.--staged
значит, что изменения будут сразу проиндексированы, как если бы вы их добавили с помощью git add
. Этот флаг особенно полезен, если вы хотите сбросить изменения, которые уже были добавлены в индекс, но ещё не закоммичены.--worktree
указывает Git восстановить файлы в рабочем каталоге до состояния указанного коммита. Это означает, что любые незакоммиченные изменения в рабочих файлах будут сброшены, и файлы будут восстановлены до состояния, соответствующего указанному коммиту.rm -r "~/.git"
~
)