Временно отключить функцию в ветке - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть ситуация, когда мне нужно отключить функцию в ветке, внести в нее изменения и затем снова активировать ее в будущем.

Мой начальный сценарий:

$ git log
14c9dcd (HEAD -> master) feature 3
af64271 feature 2
da0507a feature 1
  • 14c9dcd - создан файл3.txt
  • af64271 - отредактировал файл1.txt; созданный файл2.txt
  • da0507a - добавить файл1.txt

Теперь мне нужно отменить коммит af64271 только на ветке master и оставить изменения в коде доступными для возврата (с некоторыми изменениями) позже.

Я пытался сделать:

$ git checkout -b save_feature_2
    $ git checkout master
    $ git log --oneline   
        14c9dcd (HEAD -> master, save_feature_2) feature 3
        af64271 feature 2
        da0507a feature 1

#Reverting the "feature 2" commit changes
$ git revert af64271
    [master 8fcee28] Revert "feature 2"
    2 files changed, 1 insertion(+), 2 deletions(-)
     delete mode 100644 file2.txt

# Checking the differences
$ git diff save_feature_2
    diff --git a/file1.txt b/file1.txt
    index ba36cc9..8e90503 100644
    --- a/file1.txt
    +++ b/file1.txt
    @@ -1,2 +1 @@
    -<somecode here>
    -<more code here>
    \ No newline at end of file
    +<somecode here>
    \ No newline at end of file
    diff --git a/file2.txt b/file2.txt
    deleted file mode 100644
    index e69de29..0000000

# Checking log on master
$ git log --oneline
    8fcee28 (HEAD -> master) Revert "feature 2"
    14c9dcd (save_feature_2) feature 3
    af64271 feature 2
    da0507a feature 1

# Checking the save_feature_2 log branch
$ git checkout save_feature_2
$ git log --oneline
    14c9dcd (HEAD -> save_feature_2) feature 3
    af64271 feature 2
    da0507a feature 1

# Making same improviments on "feature 2" addind some code just on "file3.txt"
$ git log --oneline
    c4ff7f2 (HEAD -> save_feature_2) improvements on feature 2
    14c9dcd feature 3
    af64271 feature 2
    da0507a feature 1

# Now i need to reactivate the "feature 2" on master
$ git checkout master
$ git diff save_feature_2
    diff --git a/file1.txt b/file1.txt
    index ba36cc9..8e90503 100644
    --- a/file1.txt
    +++ b/file1.txt
    @@ -1,2 +1 @@
    -<somecode here>
    -<more code here>
    \ No newline at end of file
    +<somecode here>
    \ No newline at end of file
    diff --git a/file2.txt b/file2.txt
    deleted file mode 100644
    index e69de29..0000000
    diff --git a/file3.txt b/file3.txt
    index f70ef26..e69de29 100644
    --- a/file3.txt
    +++ b/file3.txt
    @@ -1 +0,0 @@
    -<improvements on feature 2>
    \ No newline at end of file

$ git merge save_feature_2
    Merge made by the 'recursive' strategy.
     file3.txt | 1 +
     1 file changed, 1 insertion(+)

$ git log --oneline
b10eabc (HEAD -> master) Merge branch 'save_feature_2' - Reactivating the feature 2
c4ff7f2 (save_feature_2) improvements on feature 2
8fcee28 Revert "feature 2"
14c9dcd feature 3
af64271 feature 2
da0507a feature 1

# At this point the "file2.txt" was no merged!

$ ls (master)
file1.txt  file3.txt
$ git checkout save_feature_2
$ ls (save_feature_2)
file1.txt  file2.txt  file3.txt

Как видите, file2.txt не был объединен!

1 Ответ

0 голосов
/ 25 апреля 2019

Ветвь save_feature_2 должна содержать revert commit и дополнительно revert of revert commit .

Когда вы объедините эту ветку обратно в master, вы снова активируете функцию.

Более конкретно:

  1. Изначально у вас есть ветвь master с коммитом FEATURE (FEATURE - это хэш компонента коммит).
  2. Вы хотите вернуть FEATURE и создать REVERT_OF_FEATURE в master ветви (это хеш коммита, сгенерированного git revert FEATURE)
  3. Вы создаете ветку с именем FEATURE_BRANCH или что-то еще. (git co -b FEATURE_BRANCH) и в этой новой ветке вы отменяете отменить коммит (git revert REVERT_OF_FEATURE)
  4. Вы продолжаете работать на master (там эта функция сейчас отсутствует) и на FEATURE_BRANCH (Здесь эта функция снова присутствует, и вы можете продолжить работу над ней)
  5. Наконец, вы объединяете FEATURE_BRANCH обратно в master, и вы получаете оригинальную функцию и дополнительные изменения в master.

Проблема, с которой вы столкнулись, заключается в том, что при слиянии ветви save_feature_2 обратно в master происходит то, что изменения всех коммитов, которые находятся в save_feature_2 ветви и не уже содержатся в целевой ветви ( master) принимаются. Но исходный коммит feature уже был там, поэтому эти изменения не включены. Но если вы включите возвратный коммит и возвратный возврат в эту функциональную ветвь , вы достигнете желаемого.

Если вы хотите исправить свою текущую ситуацию такой, какая она есть, вы можете просто объединить master в FEATURE_BRANCH (вы получите коммит REVERT_OF_FEATURE там) и затем вернуть туда REVERT_OF_FEATURE коммит.

Тем не менее, я нахожу флаги функций хорошей вещью, как @crashmstr уже упоминалось в комментариях.

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