2016-05-12 2 views
4

Используя git, я хотел бы перейти в отдельное состояние HEAD и создать новую фиксацию. Затем я хотел бы создать тег и нажать на «снятый фиксатор» и тег на удаленное репо. Это возможно?Могу ли я нажать фиксацию в отдельном состоянии HEAD

Если я создаю отдельную фиксацию в своем локальном репо и создаю тег, тогда я могу проверить тег, чтобы вернуться в это состояние. Я хотел бы поделиться этим с удаленным репо, чтобы другие виды использования могли клонировать репо и проверять тег и доходить до того же состояния.

Причина, по которой я хочу это сделать, заключается в том, что процесс сборки должен захватывать сборку # в файле, но я не хочу передавать ее ветке, где продолжается развитие. Я хочу, чтобы фиксация была отдельной, но также хотите зафиксировать фиксацию и пометить ее так, чтобы каждый мог проверить тег и файлы, которые включены в сборку. Рекомендуется ли нажать фиксацию на другую ветку, скажем, «построить»?

+0

, что случилось с просто проверить новую ветку для этого? –

+0

'git push --tags' –

+0

@JiriKremser: это тоже работает, но выталкивает * все * теги, которые могут быть более чем предназначены. – torek

ответ

6

Да, это «это» Я имею в виду главный вопрос: «Можете ли вы нажимать тегированные, но не связанные с ветвью?» - отлично. Обратите внимание, что git push работает, вызывая другой Git (например, ssh: // ... или https: // ... вызывает другой Git через интернет-телефон), при необходимости предоставляя некоторые фиксации (-ы) и затем спрашивая, что другой Git: «пожалуйста, укажите ссылочное имя, чтобы указать на некоторые конкретные фиксации».

Поскольку у вас есть тег, вы можете попросить другого Git, чтобы он задал тот же тег. Предполагая, что удаленный называется origin (как это обычно есть):

git push origin <tag> 

Вы можете изложить полное имя, refs/tags/tag, если это необходимо. Если имена тегов легко отличить от имен ветвей (например, теги и ветви никогда не начинаются с v), это никогда не понадобится (но в целом это может быть разумно).

Если у вас нет тега, вы все равно можете это сделать, но вам нужно будет предоставить другой Git a имя. Чтобы сделать это, вы могли бы сделать что-то вроде:

git push origin HEAD:refs/heads/newbranch 

или:

git push origin HEAD:refs/tags/newtag 

Хитрая немного здесь является то, что во время толчка, вы понятия не имеете, есть ли у них филиал newbranch или тег newtag уже , Если вы сами установили тег, и у вас тоже есть выбор, у вас, вероятно, есть хорошая идея, а не гарантия, конечно же, что они еще не имеют этого тега.

Обратите внимание, что если они сделать есть это имя, и вы вежливо просить, чтобы они изменить свое имя, чтобы указать на какой-либо другой фиксации, они могут отказаться. Это когда вы видите rejected ошибок от push. Вы можете командовать ими (используя git push --force или синтаксис префикса + на refspec), но это обычно не правильный путь, плюс они все равно могут отказаться (эта часть зависит от того, кто контролирует другой Git).

0

git tag mytag git push origin mytag:mytag здесь MyTag: MyTag эквивалентно ссылки/теги/MyTag: ссылки/теги/MyTag

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