Изменение коммита gitlab - PullRequest
       2

Изменение коммита gitlab

0 голосов
/ 02 марта 2020

Я бы хотел изменить git коммит, который я долго нажимал go. Есть ли простой и прямой способ сделать это?

Я сделал много изменений с тех пор, и мне очень сложно и рискованно делать это с git rebase.

Я все еще могу использовать git rebase, но я очень новичок в использовании git.

В коммите есть первый файл моего репозитория, и мне не разрешено создавать новый коммит для изменения файла, который я нажал при первом коммите.

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Я хочу изменить определенное содержимое файла c,

Вместо интерактивного перебазирования, используйте git filter-repo, который заменяет BFG или ответвление фильтра .

Использовать фильтрацию содержимого

В конце вы можете (если вы единственный, кто работает с этим хранилищем ) сделать git push --force

Если вы хотите изменить содержимое файла, вы можете сделать это на основе списка выражений в файле, по одному на строку.
Например, с файлом с именем expressions.txt, содержащим:

p455w0rd
foo==>bar
glob:*666*==>
regex:\bdriver\b==>pilot
literal:MM/DD/YYYY=>YYYY-MM-DD
regex:([0-9]{2})/([0-9]{2})/([0-9]{4})==>\3-\1-\2

и затем

git filter-repo --replace-text expressions.txt

пройдут go и заменят :

  • p455w0rd с ***REMOVED***,
  • foo с bar,
  • любой строкой, содержащей 666 с пустой строкой,
  • словом driver с pilot (но не при наличии букв до или после; например, драйверы не изменятся),
  • точный текст MM/DD/YYYY с YYYY-MM-DD и
  • строками даты в форме MM/DD/YYYY с бланками вида YYYY-MM-DD.
0 голосов
/ 02 марта 2020

Теперь, когда вы подтвердили, что нам разрешено делать новые коммиты для достижения желаемого эффекта, самый простой способ сделать это: сделать то, что написано на Как вставить коммит между двумя произвольными коммитами в прошлое? для вставки изменения изменений после проблемной фиксации. Затем интерактивная перебазировка в квадрат sh вставленного коммита в проблемный коммит.

Я покажу:

humlet:gittest matt$ git init
humlet:gittest matt$ echo test > dummy.txt
humlet:gittest matt$ git add .
humlet:gittest matt$ git commit -m "start"
humlet:gittest matt$ echo crucial > crucial.txt
humlet:gittest matt$ git add .
humlet:gittest matt$ git commit -m "created crucial file"
humlet:gittest matt$ echo test2 > dummy.txt
humlet:gittest matt$ git commit -am "changed dummy"
humlet:gittest matt$ echo test3 > dummy.txt
humlet:gittest matt$ git commit -am "changed dummy again"

git log показывает, что коммиты

    changed dummy again
    changed dummy
    created crucial file
    start

Хорошо, поэтому цель состоит в том, чтобы изменить то, что находится в vital.txt , и поместить этот коммит вместо коммита «создан критический файл». git log показывает, что этот коммит 785f75. Здесь мы go:

humlet:gittest matt$ git branch temp 785f75
humlet:gittest matt$ git checkout temp
humlet:gittest matt$ echo whoa > crucial.txt
humlet:gittest matt$ git commit -am "teehee"
humlet:gittest matt$ git rebase temp master

Теперь мы вставили коммит ("teehee"), содержащий исправленный vital.txt , но у нас слишком много коммитов:

    changed dummy again
    changed dummy
    teehee
    created crucial file
    start

Так что теперь мы go вернулись и взяли sh "teehee" на "созданный важный файл". Для этого мы делаем интерактивный перебаз, начиная с коммита, предшествующего им обоим, то есть «начало»; git log показывает, что это e01e0c5:

humlet:gittest matt$ git rebase -i e01e0c5

В интерактивном ребазе мы pick показываем все коммиты, кроме того, что мы squash "teehee". Когда нам предлагается изменить сообщение коммита, мы меняем его на «созданный важный файл». git log показывает, что у нас теперь есть

    changed dummy again
    changed dummy
    created crucial file
    start

Хорошо, теперь давайте проверим, что находится в коммите "создан критический файл":

humlet:gittest matt$ git diff 65c198 e01e0c
diff --git a/crucial.txt b/crucial.txt
deleted file mode 100644
index 0a6a129..0000000
--- a/crucial.txt
+++ /dev/null
@@ -1 +0,0 @@
-whoa

Итак, вы видите, это выглядит как " создал критический файл "добавлен resol.txt , и он состоит из" whoa ". Это желаемый результат.

Отказ от ответственности: Изменение истории, которую вы нажали, неверно. Не делай этого.

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