Когда я клонирую репозиторий с помощью git (терминал), а затем выполняю проверку в удаленной ветке разработки с помощью nodegit, он работает нормально. Но я столкнулся с проблемой: когда я хочу вернуться к удаленной главной ветке с предоставленным пример, я не могу этого понять.
Клонирование с помощью SSH
git clone [email protected]/projects/myproject.git
Checkout для разработки работает со следующим кодом, но не работает при обратном переключении, поскольку основная ветвь уже существует локально.
git.Repository.open(appDir)
.then((repo) => {
return repo.getHeadCommit()
.then((targetCommit) => {
return repo.createBranch(repositoryConfig.branch, targetCommit, false);
})
.then((reference) => {
return repo.checkoutBranch(reference, {});
})
.then(() => {
return repo.getReferenceCommit('refs/remotes/origin/' + repositoryConfig.branch);
})
.then((commit) => {
git.Reset.reset(repo, commit, 3, {});
})
.catch((err) => {
reject(err);
});
})
.then(() => {
resolve('Checking out branch ' + repositoryConfig.branch + ' done');
})
.catch((err) => {
reject(err);
});
Я попробовал это с помощью этого кода, который сбрасывает мою локальную копию в основную ветку, но не «следует» за ней, потому что после извлечения я узнаю, что я X совершаю отстающий и что я должен выполнить извлечение.
git.Repository.open(appDir)
.then((repo) => {
return repo.getBranch('refs/remotes/origin/' + repositoryConfig.branch)
.then((reference) => {
return repo.checkoutBranch(reference, {});
})
.then(() => {
return repo.getReferenceCommit('refs/remotes/origin/' + repositoryConfig.branch);
})
.then((commit) => {
git.Reset.reset(repo, commit, 3, {});
})
.catch((err) => {
reject(err);
});
})
.then(() => {
console.info('Checking out branch ' + repositoryConfig.branch + ' done');
resolve();
})
.catch((err) => {
reject(err);
});
В repositoryConfig.branch я установил ветвь для включения переключения.
Я не совсем разбираюсь в git и том, как он работает с прикреплением / отсоединением HEAD и наоборот. Буду признателен за любую помощь.
@SajibKhan Это то, что я делаю во втором блоке кода, как вы упомянули в 2. Ветка проверки, получение фиксации и сброс на нее. После этого моя локальная копия настроена на master, но вытягивание и переключение на разработку больше не работает, потому что я все еще слежу за разработкой.
Убедитесь, что вы сбрасываете локальный master с последней фиксацией remote/master. "после извлечения мне сообщается, что я X совершает фиксацию ..." это сообщение должно появиться, когда local не обновляется с помощью удаленного
А после git fetch пробовали?
@SajibKhan Не работает с nodegit. Я добавлял repo.fetchAll раньше, но моя локальная копия по-прежнему следует разработке, а не мастеру.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


При переключении обратно на локальную ветвь
masterсначала загрузите удаленный (git fetch), вы можете сделать любое из: 1. Удалить локальныйmaster, оформить заказ в веткуmasterс историейorigin/master(git branch -D master; git checkout master) 2. оформить заказ вmasterи выполнить полный сброс вorigin/master(git checkout master; git reset --hard origin/master)