Как git переустанавливать ветку из другой ветки для непосредственного управления? [Дубликат]

Вы должны выполнить следующие действия:

Откройте файл конфигурации php, который находится в следующем каталоге

C: \ xampp \ php \ php.ini

. Внутри этого файла найдите раздел расширения и раскомментируйте следующие строки

extension = php_pdo_pgsql.dll  
extension = php_pgsql.dll

и перезапустите apache

19
задан MrMisterMan 26 November 2015 в 17:23
поделиться

5 ответов

67
ответ дан Community 17 August 2018 в 11:33
поделиться

Вы можете попробовать сами и посмотреть. Вы можете создать локальный репозиторий git для воспроизведения с помощью:

#! /bin/bash
set -e
mkdir repo
cd repo

git init
touch file
git add file
git commit -m 'init'

echo a > file0
git add file0
git commit -m 'added a to file'

git checkout -b A
echo b >> fileA
git add fileA
git commit -m 'b added to file'
echo c >> fileA
git add fileA
git commit -m 'c added to file'

git checkout -b B
echo x >> fileB
git add fileB
git commit -m 'x added to file'
echo y >> fileB
git add fileB
git commit -m 'y added to file'
cd ..

git clone repo rebase
cd rebase
git checkout master
git checkout A
git checkout B
git rebase master
cd ..

git clone repo onto
cd onto
git checkout master
git checkout A
git checkout B
git rebase --onto master A B
cd ..

diff <(cd rebase; git log --graph --all) <(cd onto; git log --graph --all)
1
ответ дан choroba 17 August 2018 в 11:33
поделиться

Различия:

Первый набор

  • (B) git rebase master
    *---*---* [master]
             \
              *---*---*---* [A]
                       \
                        *---*---* [B](HEAD)
    

Ничего не произошло. Никаких новых коммитов в ветви master с момента создания ветви B.

  • (B) git checkout master
    *---*---* [master](HEAD)
             \
              *---*---*---* [A]
                       \
                        *---*---* [B]
    
  • (master) git merge B
    *---*---*-----------------------* [Master](HEAD)
             \                     /
              *---*---*---* [A]   /
                       \         /
                        *---*---* [B]
    

Второй набор

  • (B) git rebase --onto master A B
    *---*---*-- [master]
            |\
            | *---*---*---* [A]
            |
            *---*---* [B](HEAD)
    
  • (B) git checkout master
    *---*---*-- [master](HEAD)
            |\
            | *---*---*---* [A]
            |
            *---*---* [B]
    
  • (master) git merge B
    *---*---*----------------------* [master](HEAD)
            |\                    /
            | *---*---*---* [A]  /
            |                   /  
            *---*--------------* [B]
    

Я хочу объединить мои изменения B (и только мои изменения B, без изменений A) в master

Будьте внимательны, что вы понимаете для «только мои изменения B».

В первом наборе ветвь B (перед окончательным слиянием) :

 *---*---*
          \
           *---*---*
                    \
                     *---*---* [B]

И во втором наборе ваша ветвь B:

*---*---*
        |
        |
        |
        *---*---* [B]

Если я правильно понимаю, то, что вы хотите, это только бит B, который не находится в ветви A , Итак, второй набор является правильным выбором для вас до слияния.

10
ответ дан Dherik 17 August 2018 в 11:33
поделиться
  • 1
    Так с каким-либо образом, может ли код из A сделать его мастером? Потому что, согласно вашим диаграммам, они оба имеют одинаковые результаты. – MrMisterMan 26 November 2015 в 17:41
  • 2
    Они разные. См. Мое обновление, мой график был смущен. – Dherik 26 November 2015 в 18:00

git log --graph --decorate --oneline A B master (или эквивалентный инструмент GUI) можно использовать после каждой команды git для визуализации изменений.

Это начальное состояние репозитория, а B - текущая ветка.

(B) git log --graph --oneline --decorate A B master
* 5a84c72 (A) C6
| * 9a90b7c (HEAD -> B) C9
| * 2968483 C8
| * 187c9c8 C7
|/  
* 769014a C5
* 6b8147c C4
* 9166c60 C3
* 0aaf90b (master) C2
* 8c46dcd C1
* 4d74b57 C0

Вот скрипт для создания репозитория в этом состоянии.

#!/bin/bash

commit () {
    for i in $(seq $1 $2); do
        echo article $i > $i
        git add $i
        git commit -m C$i
    done
}

git init
commit 0 2

git checkout -b A
commit 3 6

git checkout -b B HEAD~
commit 7 9

Первая команда rebase ничего не делает.

(B) git rebase master
Current branch B is up to date.

Проверка out master и слияние B просто указывает master при том же фиксации, что и B, (т.е. 9a90b7c). Никаких новых коммитов не создано.

(B) git checkout master
Switched to branch 'master'

(master) git merge B
Updating 0aaf90b..9a90b7c
Fast-forward
<... snipped diffstat ...>

(master) git log --graph --oneline --decorate A B master
* 5a84c72 (A) C6
| * 9a90b7c (HEAD -> master, B) C9
| * 2968483 C8
| * 187c9c8 C7
|/  
* 769014a C5
* 6b8147c C4
* 9166c60 C3
* 0aaf90b C2
* 8c46dcd C1
* 4d74b57 C0

Вторая команда rebase копирует коммиты в диапазоне A..B и указывает их на master. Три коммиты в этом диапазоне: 9a90b7c C9, 2968483 C8, and 187c9c8 C7. Копии - новые коммиты с их собственными идентификаторами фиксации; 7c0e241, 40b105d и 5b0bda1. Фигуры master и A не изменяются.

(B) git rebase --onto master A B
First, rewinding head to replay your work on top of it...
Applying: C7
Applying: C8
Applying: C9

(B) log --graph --oneline --decorate A B master
* 7c0e241 (HEAD -> B) C9
* 40b105d C8
* 5b0bda1 C7
| * 5a84c72 (A) C6
| * 769014a C5
| * 6b8147c C4
| * 9166c60 C3
|/  
* 0aaf90b (master) C2
* 8c46dcd C1
* 4d74b57 C0

Как и раньше, проверка master и слияние B просто указывает master на ту же фиксацию, что и B, ( т.е. 7c0e241). Никаких новых коммитов не создано.

Исходная цепочка фиксаций, указывающая B, все еще существует.

git log --graph --oneline --decorate A B master 9a90b7c
* 7c0e241 (HEAD -> master, B) C9
* 40b105d C8
* 5b0bda1 C7
| * 5a84c72 (A) C6
| | * 9a90b7c C9    <- NOTE: This is what B used to be
| | * 2968483 C8
| | * 187c9c8 C7
| |/  
| * 769014a C5
| * 6b8147c C4
| * 9166c60 C3
|/  
* 0aaf90b C2
* 8c46dcd C1
* 4d74b57 C0
2
ответ дан sigjuice 17 August 2018 в 11:33
поделиться

Перед любой из данных операций ваш репозиторий выглядит следующим образом:

           o---o---o---o---o  master
                \
                 x---x---x---x---x  A
                                  \
                                   o---o---o  B

После стандартного rebase (без --onto master) структура будет:

           o---o---o---o---o  master
               |            \
               |             x'--x'--x'--x'--x'--o'--o'--o'  B
                \
                 x---x---x---x---x  A

. .. где x' фиксируется из ветви A. (Обратите внимание, как они теперь дублируются в базе ветки B.)

Вместо этого, с помощью команды --onto master будет создана следующая более чистая и простая структура:

           o---o---o---o---o  master
               |            \
               |             o'--o'--o'  B
                \
                 x---x---x---x---x  A
11
ответ дан XML 17 August 2018 в 11:33
поделиться
  • 1
    началось с ветвей A и B, прямо на 1-м ответе, A и B исчезли. Вместо этого есть следующая тема. И с x 'и o'. Для понимания вашего ответа читателю нужно какое-то умственное обращение. Также было бы более читаемым, чтобы символизировать коммиты A1, A2 ... и B1, B2, ... вместо o и x. – Polymerase 5 March 2017 в 21:46
  • 2
    Это, безусловно, самое ясное, простое объяснение иначе византийских различий, несмотря на высказанное выше замечание. – XML 10 April 2017 в 09:39
  • 3
    Я внес изменения, надеюсь, уточнить, сохраняя намерения ОА. – XML 10 April 2017 в 09:44
  • 4
    Можем ли мы сказать, что это просто «перемещение» ветки? – Ambroise Rabier 26 February 2018 в 10:26
Другие вопросы по тегам:

Похожие вопросы: