HEAD отсоединяется от origin / master при слиянии с pygit2 - PullRequest
0 голосов
/ 07 июня 2019

Я использую pygit2 для объединения некоторых веток проекта, однако всякий раз, когда я объединяю их, я получаю:

def avoid_walls(directions, board, snake):
<<<<<<< HEAD
return directions
=======
z = 1
moves = []
for direction in directions:
    new_x = snake[0][0] + dirs[direction][0]
    new_y = snake[0][1] + dirs[direction][1]
    if new_x >= 0 and new_x < len(board[0]) and new_y >= 0 and new_y < len(board):
        moves.append(direction)
return moves
>>>>>>> 357f58b6d1682760b2fa9bf7b2418da347ca353c

в моем коде.Когда я проверяю репозиторий с «git status», я нахожу это:

HEAD detached from origin/master
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Насколько я могу судить, я все делаю правильно, поэтому я не могу понять, почему HEAD отсоединен.Насколько я понимаю, HEAD отсоединяется, когда вы проверяете конкретную фиксацию, а не ветку, которой я не занимаюсь:

# clone repo to local directory
repo = pygit2.clone_repository(my_repo, my_dir)

# checkout master branch (checked out by default, but just to be safe)
repo.checkout('refs/remotes/origin/master')

# merge with other branches
repo.merge(repo.branches['origin/branch1'].target)

# commit changes
index = repo.index
index.add_all()
index.write()
author = pygit2.Signature("ME", "me@domain.com")
commiter = pygit2.Signature("ME", "me@domain.com")
tree = index.write_tree()
oid = repo.create_commit('refs/heads/master', author, commiter, "init commit", tree, [repo.head.target, repo.branches['origin/branch1'].target])

#some tests i tried to fix the issue
repo.head.set_target(oid)
repo.apply(oid)

Я пропустил что-то после объединения, которое завершит фиксацию и разрешитэтот вопрос?

1 Ответ

1 голос
/ 07 июня 2019

refs/remotes/origin/master не является веткой. Все ветви начинаются с refs/heads/:

if name.startswith('refs/heads/'):
    print('{} is a branch name'.format(name))
else
    print('{} is not a branch name'.format(name))

В этом случае, поскольку он начинается с refs/remotes/, это имя удаленного отслеживания (документация Git обычно называет это имя удаленного отслеживания , но я думаю, что это слишком вводит в заблуждение, поскольку в нем содержится слово branch , хотя это не имя branch ).

Когда вы извлекаете имя для удаленного отслеживания, или имя тега, или любое имя, которое не является ответвлением , вы действительно проверяете конкретный коммит и получаете отсоединенный HEAD .

...