Как эффективно перебазировать и протолкнуть локальную ветку git?
Мы используем центральный репозиторий git, который я клонировал, и я работаю над локальной веткой.
Когда я хочу сделать свои изменения доступными в центральном репозитории, я должен выполнить следующие команды (начиная с mybranch
):
#Stash local changes not yet ready for checkin
git stash
#Make sure we have all changes from the central repository
git checkout master
git pull
#Rebase local changes
git checkout mybranch
git rebase
#Push changes
git checkout master
git merge mybranch
git push
#Back to my branch and continue work
git checkout mybranch
git stash apply
Я хотел бы знать, возможно ли использовать меньше команд git для достижения той же цели. Несколько переключателей между master
а также mybranch
особенно раздражают, так как наш репозиторий довольно большой, поэтому он занимает некоторое время.
4 ответа
Нет необходимости прикасаться к локальной ветке master, если вам не нужно ее обновлять, и это, кажется, вызывает много ненужных переключений ветвей.
Это более минимальный рабочий процесс.
git fetch
# ensure that everything is committed
# perhaps git commit -a is required...
git rebase origin/master
# If you don't want to push the very latest commits you might
# want to checkout a parent or ancestor of the current commit
# to test that the proposed commit passes tests, etc.
# e.g. git checkout HEAD~n
# push to the remote master
git push origin HEAD:master
# if you checked out a parent, go back to the original branch
git checkout mybranch
Если вы уверены в родительском коммите, вы можете пропустить этапы оформления заказа и просто сделать следующее, но я настоятельно рекомендую против этого. Публикация непроверенных коммитов не является "лучшей практикой".
git push origin HEAD^:master
Нет необходимости тянуть как ветки master, так и ветви mybranch. Поскольку вы являетесь таким хорошим гражданином и делаете быстрые обновления, это довольно просто:
# Save local mods not ready for commit
git stash
# Do the pull & rebase local work assuming this is a remote tracking branch
git pull --rebase
git checkout master
git merge mybranch
git push
Конечно, вы также можете нажать из своей ветки MyBranch
# Save local mods not ready for commit
git stash
# Do the pull & rebase local work assuming this is a remote tracking branch
git pull --rebase
git push origin mybranch:master
Вы можете объединить тянуть и перебазировать в одно:
git pull --rebase master
Но в целом, да, исходя из моего опыта, он включает в себя все эти команды.
Чтобы сохранить ваш репозиторий в чистоте, полезно часто запускать "git gc", который удалит неиспользуемые объекты. Это должно сократить время переключения веток.
Я обычно делаю.
git co master
git pull
git rebase master mywrk # fix conflicts if any
git rebase mywrk master
git push
Вы можете определить псевдонимы, чтобы сохранить ввод, если вам это нравится.