git pull всегда открывает новое окно коммита - PullRequest
0 голосов
/ 30 апреля 2018

Я сталкиваюсь с некоторой путаницей с git, Мои основы git испортились.

Я работал над веткой master, сделал несколько изменений и сделал git add + git commit и после этого я сделал git pull, теперь я запутался, потому что всякий раз, когда я делаю git pull, я получаю новое окно коммита.

Раньше, когда бы я ни делал вышеупомянутые шаги, сообщение коммита никогда не появлялось, оно автоматически сливалось с удаленным источником.

Теперь, когда я делаю git pull с удаленным источником, появляется новое окно коммита.

Что-то не так, но я не могу понять.

Пожалуйста, помогите.

Вот журнал git, который мне кажется странным.

1-й коммит появляется всякий раз, когда я делаю git pull. Что не должно произойти, если я не испортил что-то Пожалуйста, помогите мне понять, что произошло.

commit e5dac0fbd72f17d87c9ec2090f29b603b399088f (HEAD -> master)
Merge: b44d245 f407e5b
Author: Abhi
Date:   Mon Apr 30 02:32:32 2018 -0700

    Merge branch 'master' of https://github.com/networks/test_automation

commit b44d245400b72a994ff57f0ac2a5db7b75964266
Author: Abhi
Date:   Mon Apr 30 01:51:48 2018 -0700

    Test cases for the remote EP feature.

    Add test cases for pod traffic between same uplink, different uplink
    Add test cases for creating multiple EPG and assiging pods to EPG
    and checking the connectivity between them

commit f407e5bcae8a798a84e28d275432a324889523f8 (origin/master, origin/HEAD)
Author: Ceridwen 
Date:   Fri Apr 20 16:40:31 2018 -0700

    Use acikubectl to write the cluster-report to a file

commit 8b0084c6ca9df913a05f6c910d923621032ea0d2

Ответы [ 2 ]

0 голосов
/ 19 июня 2018

Спасибо всем за помощь.

Только если кто-то захочет узнать, как я решил это тогда; Я использовал git pull --rebase, и он работал без создания нового коммита.

0 голосов
/ 30 апреля 2018

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

Я бы предложил использовать такой инструмент, как gitk, или создать псевдоним bash, например: alias glog="git log --all --graph --pretty=oneline --decorate=short --abbrev-commit" А затем используйте это, чтобы лучше понять, что на самом деле делает push / pull / merge / fetch.

Помните, происхождение / мастер это ветка remote . Ветвь, которую увидит любой, кто делает git clone. master является локальной веткой. Только вы действительно увидите, что происходит в вашей ветке master. Когда вы нажимаете master на origin, origin/master будет обновляться с вашим коммитом.

Однако, git push origin master будет успешным, только если у вас уже есть последняя origin/master, которая была нажата. В этом случае я думаю, что кто-то выдвинул коммит на origin/master между вашим последним git pull и вашим git commit, что означает, что ваш master не синхронизировался с origin/master, когда вы сделали свой коммит. Это будет выглядеть так:

master origin/master | / B-----/ | A

Здесь A и B - это коммиты, которые вы оба видите, потому что и вы, и ваш коллега сделали git pull и получили A и B. Затем ваш коллега выдвинул новый коммит на origin/master, который вы не получили до того, как сделали свой коммит. Следовательно, и ваши master, и origin/master основаны непосредственно на B.

Когда вы выполните git pull, git увидит это и попытается объединить два коммита. В вашем случае это удалось (ура, иначе у нас был бы совершенно другой вопрос). Результат вашего git pull будет тогда:

master | \ C origin/master | / B-----/ | A

Здесь C - ваш предыдущий мастер. Поскольку C и origin/master не в последовательности, git должен был выполнить слияние и создать коммит слияния для этого. Вот что вы видите в своем git log.

Почему вы не видели этого в своих предыдущих git pull с? Что ж. Если master и origin/master не расходятся, например, если ваш коллега что-то нажал, и вы сделали git pull перед тем, как сделать свой собственный коммит, то ваша ситуация (до вытягивания) будет выглядеть примерно так:

origin/master | master | B | A

В этой ситуации вам не нужно слияние, и никакое слияние не будет создано, потому что git увидит, что можно выполнить «ускоренную перемотку вперед». Быстрая перемотка вперед означает, что git переместится на master вперед без слияния, потому что ветви не расходятся. Это может быть то, что вы видели ранее.

В общем, я думаю, что эти вещи легче увидеть, если использовать лучшие инструменты визуализации (например, gitk или псевдоним), а также я предпочитаю делать git fetch, затем посмотреть на это, затем сделать git merge origin/master. Лично я просто думаю, что намного легче понять, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...