kzen.dev
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 MicTech
MicTech
Question

Jak zmienić autora commitów dla jednego konkretnego commitu?

Chcę zmienić autora jednego konkretnego commitu w historii. Nie jest to ostatni commit.

Wiem o tym pytaniu - Jak zmienić autora commitu w git?.

Ale zastanawiam się nad czymś, gdzie identyfikuję commit przez hash lub short-hash.

1928 2010-06-15T04:00:08+00:00 3
Ciro  Santilli 新疆改造中心法轮功六四事件
Ciro Santilli 新疆改造中心法轮功六四事件
Edytowane pytanie 24. czerwca 2018 в 7:59
Programowanie
git
git-commit
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Solution / Answer
 Amber
Amber
15. czerwca 2010 в 4:31
2010-06-15T04:31:46+00:00
Więcej
Źródło
Edytuj
#10593083

Interaktywny rebase z punktu wcześniejszego w historii niż commit, który chcesz zmodyfikować (git rebase -i <earliercommit>). Na liście commitów poddawanych rebase, zmień tekst z pick na edit obok hasha tego, który chcesz zmodyfikować. Następnie, gdy git poprosi cię o zmianę commitu, użyj tego:

git commit --amend --author="Author Name <[email protected]>"

Na przykład, jeśli twoja historia commitów to A-B-C-D-E-F z F jako HEAD, a ty chcesz zmienić autora C i D, to...

  1. Określić git rebase -i B (tutaj jest przykład tego co zobaczysz po wykonaniu komendy git rebase -i B)
  • jeśli potrzebujesz edytować A, użyj git rebase -i --root.
  1. zmień linie dla obu C i D z pick na edit.
  2. Kiedy rebase się rozpocznie, najpierw zatrzyma się na C.
  3. Zrobiłbyś git commit --amend --author="Author Name <[email protected]>".
  4. Następnie git rebase --continue.
  5. Znowu zatrzymałby się na D.
  6. Następnie git commit --amend --author="Author Name <[email protected]>" ponownie.
  7. git rebase --continue.
  8. Proces rebase zostałby zakończony.
  9. Użyj git push -f, aby zaktualizować swój origin o zaktualizowane commity.
 coderade
coderade
Edytowana odpowiedź 16. września 2018 в 8:36
3238
0
Do you have a question? Add it on the site and get an answer instantly
en.kzen.dev
Chris Johnsen
Chris Johnsen
15. czerwca 2010 в 5:24
2010-06-15T05:24:55+00:00
Więcej
Źródło
Edytuj
#10593088

Odpowiedzi w pytaniu, do którego się odniosłeś, są dobre i obejmują twoją sytuację (inne pytanie jest bardziej ogólne, ponieważ obejmuje przepisywanie wielu commitów).

Jako pretekst do wypróbowania git filter-branch, napisałem skrypt do przepisywania Author Name i / lub Author Email dla danego commitu:

#!/bin/sh

#
# Change the author name and/or email of a single commit.
#
# change-author [-f] commit-to-change [branch-to-rewrite [new-name [new-email]]]
#
#     If -f is supplied it is passed to "git filter-branch".
#
#     If <branch-to-rewrite> is not provided or is empty HEAD will be used.
#     Use "--all" or a space separated list (e.g. "master next") to rewrite
#     multiple branches.
#
#     If <new-name> (or <new-email>) is not provided or is empty, the normal
#     user.name (user.email) Git configuration value will be used.
#

force=''
if test "x$1" = "x-f"; then
    force='-f'
    shift
fi

die() {
    printf '%s\n' "$@"
    exit 128
}
targ="$(git rev-parse --verify "$1" 2>/dev/null)" || die "$1 is not a commit"
br="${2:-HEAD}"

TARG_COMMIT="$targ"
TARG_NAME="${3-}"
TARG_EMAIL="${4-}"
export TARG_COMMIT TARG_NAME TARG_EMAIL

filt='

    if test "$GIT_COMMIT" = "$TARG_COMMIT"; then
        if test -n "$TARG_EMAIL"; then
            GIT_AUTHOR_EMAIL="$TARG_EMAIL"
            export GIT_AUTHOR_EMAIL
        else
            unset GIT_AUTHOR_EMAIL
        fi
        if test -n "$TARG_NAME"; then
            GIT_AUTHOR_NAME="$TARG_NAME"
            export GIT_AUTHOR_NAME
        else
            unset GIT_AUTHOR_NAME
        fi
    fi

'

git filter-branch $force --env-filter "$filt" -- $br
55
0
Do you have a question? Add it on the site and get an answer instantly
en.kzen.dev
 dnozay
dnozay
28. sierpnia 2013 в 1:03
2013-08-28T01:03:14+00:00
Więcej
Źródło
Edytuj
#10593089

Podczas wykonywania git rebase -i jest ten interesujący fragment w doc:

Jeśli chcesz złożyć dwa lub więcej commitów w jeden, zamień komendę "pick" dla drugiego i kolejnych commitów na "squash" lub "fixup". Jeśli commity miały różnych autorów, złożony commit będzie przypisany do autora pierwszego commitu. Sugerowana wiadomość commit dla złożonego commitu jest konkatenacją wiadomości commit z pierwszego commitu i tych z komendą "squash", ale pomija wiadomości commit z commitów z komendą "fixup".

  • Jeśli masz historię A-B-C-D-E-F,
  • i chcesz zmienić commity B i D (= 2 commity),

to możesz zrobić:

  • git config user.name "Popraw nową nazwę".
  • git config user.email "[email protected]".
  • Utwórz puste commity (po jednym dla każdego commitu):
  • potrzebujesz wiadomości do celów rebase
  • git commit --allow-empty -m "empty".
  • rozpocznij operację rebase
  • git rebase -i B^
  • B^ wybiera rodzica B.
  • będziesz chciał umieścić jeden pusty commit przed każdym commitem do modyfikacji
  • będziesz chciał zmienić pick na squash dla tych.

Przykład tego co da ci git rebase -i B^:

pick sha-commit-B some message
pick sha-commit-C some message
pick sha-commit-D some message
pick sha-commit-E some message
pick sha-commit-F some message
# pick sha-commit-empty1 empty
# pick sha-commit-empty2 empty

zmień to na:

# change commit B's author
pick sha-commit-empty1 empty
squash sha-commit-B some message
# leave commit C alone
pick sha-commit-C some message
# change commit D's author
pick sha-commit-empty2 empty
squash sha-commit-D some message
# leave commit E-F alone
pick sha-commit-E some message
pick sha-commit-F some message

Zostaniesz poproszony o edycję wiadomości:

# This is a combination of 2 commits.
# The first commit's message is:

empty

# This is the 2nd commit message:

...some useful commit message there...

i możesz po prostu usunąć kilka pierwszych linii.

14
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
Andrei Kalinin
Zarejestrowany 2 tygodnie temu
2
Koroleva Ego
Zarejestrowany 1 miesiąc temu
3
Star Lenon
Zarejestrowany 1 miesiąc temu
4
Данил Жевнеров
Zarejestrowany 1 miesiąc temu
5
Анна Литвиненко
Zarejestrowany 2 miesiące temu
Do you have a question? Add it on the site and get an answer instantly
en.kzen.dev
BG
DA
DE
EL
ES
FI
FR
ID
IT
JA
KO
LV
NL
NO
PL
PT
RO
RU
TR
ZH
© kzen.dev 2023
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem