A Git kötelezettségvállalási előzményeinek helyreállítása: lépésről lépésre
Rosszul állítottam be a user.name-emet és a user.e-mail-emet, amit egy hónapnyi kemény erőfeszítés után találtam egy személyes projekten. Még azután is, hogy elvégeztem ezeket a javításokat, jóval később rájöttem, hogy a hibás szerzőnév még mindig ott volt az előző commitokban. Megpróbáltam egy git rebase-t, hogy frissítsem a hozzájárulási grafikonomat a véglegesítések megváltoztatásával.
Ezzel azonban a véglegesítési dátumok akaratlanul megváltoztak, és azt a benyomást keltették, mintha az összes kötelezettséget egyszerre hajtották volna végre. Egy ilyen nem szándékos módosítás után ez az oktatóanyag megpróbál segíteni abban, hogy visszanyerje eredeti kötelezettségvállalási előzményeit, hogy hozzájárulásai megfelelően tükröződjenek.
Parancs | Leírás |
---|---|
git reflog | Megjeleníti az összes lerakatmódosítás előzményét, beleértve az újrabázisokat és a visszaállításokat is, a referencianaplóban. |
git reset --hard | Törli a munkakönyvtáron és az állomásozási területen végzett összes módosítást, és visszaállítja az aktuális ágat a kiválasztott véglegesítésre. |
git push --force | Arra kényszeríti a helyi változtatásokat, hogy a távoli tárolóba kerüljenek, törlve a korábbi ütközéseket. |
git filter-branch --env-filter | Szűrőt alkalmaz minden véglegesítésre, átírja a Git-előzményeket, és lehetővé teszi a környezeti változók, például a szerzői és a végrehajtói adatok módosítását. |
WRONG_EMAIL="wrong@example.com" | Változót hoz létre a korábbi véglegesítésekhez használt hibás e-mail cím nyomon követésére. |
CORRECT_NAME="Correct Name" | Változót hoz létre, amely jelzi, hogy melyik nevet kell megváltoztatni a felülvizsgált előzményekben. |
CORRECT_EMAIL="correct@example.com" | Beállít egy változót, amely jelzi, hogy a frissített előzményekben melyik e-mail címet kell használni a régi helyett. |
export GIT_COMMITTER_NAME | Az újraírt véglegesítéseknél a véglegesítő nevét a megadott értékre állítja be. |
export GIT_COMMITTER_EMAIL | Az újraírt véglegesítések esetén a véglegesítő e-mail-címét a megadott értékre állítja. |
export GIT_AUTHOR_NAME | Módosítja a szerző nevét az újraírt véglegesítések kiválasztott értékére. |
export GIT_AUTHOR_EMAIL | Módosítja a szerző e-mail-címét az újraírt véglegesítések kijelölt értékére. |
--tag-name-filter cat | Gondoskodik arról, hogy a címkék is átírásra kerüljenek az adott szűrő használatával. |
A Git történelem helyreállításának megértése
The scripts offered are meant to rectify and restore Git's commit history, especially in cases where an inadvertent rebase has changed commit dates. In the first script, the commit hash is found before the rebase process by utilizing . Ez a parancs megjeleníti az összes lerakatmódosítás előzményét, beleértve az alaphelyzetbe állításokat és az újraalapozásokat is. A megfelelő véglegesítési hash megtalálásakor az ág visszaáll erre a véglegesítésre a következővel parancsot, ezáltal törli az összes későbbi módosítást. Ez egy fontos lépés, mivel visszaállítja a lerakat a helytelen újraalapozás előtti állapotába. A helyi módosítások ezután a távoli tárolóba kerülnek a parancsot, felülírva az előző előzményeket a reset ággal.
A második szkript célja a véglegesítés szerzői adatainak frissítése a véglegesítés dátumának megváltoztatása nélkül. Használatával a parancs, a környezeti változók, mint például a szerző és a végrehajtó adatai, minden véglegesítés során módosíthatók. A pontatlan részletek észlelésére és az új, helyesek leírására a változók, mint pl , , és CORRECT_EMAIL vannak meghatározva. Ezután a szkript frissíti a committer adatait a használatával és ; hasonlóképpen frissíti a szerző adatait a használatával és export GIT_AUTHOR_EMAIL. Az opció garantálja, hogy a címkék átírása is a megadott szűrőkkel történik. Ez a szkript használható a véglegesítési előzmények átírására a megfelelő szerzői adatokkal anélkül, hogy az eredeti véglegesítési dátumokat befolyásolná.
A Git eredeti kötelezettségvállalási előzményeinek visszaállítása
Git parancsok használata
# Step 1: Identify the commit hash before the rebase
git reflog
# Look for the commit hash before the rebase operation
# Step 2: Reset the branch to the commit before the rebase
git reset --hard <commit_hash>
# Step 3: Verify the reset
git log
# Ensure the commit history is back to its original state
# Step 4: Force push the reset history to the remote repository
git push --force
A véglegesítés szerzői adatainak újraírása, miközben a dátumok változatlanok maradnak
Git Filter-Branch használata
# Step 1: Rewrite author information without altering commit dates
git filter-branch --env-filter '
WRONG_EMAIL="wrong@example.com"
CORRECT_NAME="Correct Name"
CORRECT_EMAIL="correct@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi'
--tag-name-filter cat -- --branches --tags
Az előzmények visszaállítása a Git használatával adatvesztés nélkül
The use of egy másik tényező, amelyet figyelembe kell venni a Git előzmények visszaállítása során. Ezzel a paranccsal alkalmazhatja a korábbi véglegesítések módosításait az aktuális ágra. Ha manuálisan kell rekonstruálnia egy véletlenül megváltozott előzményt, az nagyon hasznos lehet. Például, ha egy újraalapozás vagy alaphelyzetbe állítás rosszul sikerül, és egyedi módosításokat szeretne visszavinni, használhatja hogy ezt tegye. Ez a technika érintetlenül tartja a projekt történetét azáltal, hogy megőrzi az eredeti véglegesítési dátumokat és üzeneteket.
egy további hasznos parancs. Megjeleníti az ágak tippjein és egyéb tárolóhivatkozásain végzett összes módosítás előzményét, még azokat is, amelyek gyakran el vannak rejtve a képernyőn. . Ez lehetővé teszi, hogy megtalálja azokat a véglegesítési kivonatokat, amelyek felülírhatók vagy elvesztek a kedvezőtlen visszaállítások vagy újraalapozások során. kombinációját használva és git reset --hard, you can revert modifications by restoring your branch to a former state. Furthermore, it's crucial to occasionally take snapshots of the status of your repository using . A címkék azért hasznosak, mert lehetővé teszik bizonyos történelmi pillanatok megjegyzését, amelyek súlyos problémák esetén visszavonhatók.
- Mi a célja ?
- Segíti a történelem manuális rekonstrukcióját azáltal, hogy az aktuális ágon alkalmazza a korábbi kötelezettségvállalások módosításait.
- What role does játszani a múlt megőrzésében?
- Megkönnyíti az elveszett véglegesítések helyreállítását azáltal, hogy megjeleníti az elágazási tippeken és hivatkozásokon végzett összes módosítás előzményét.
- Mit tesz átlagos?
- Törli a munkakönyvtáron és az állomásozási területen végzett összes módosítást, és visszaállítja az aktuális ágat egy bizonyos véglegesítésre.
- Mire használhatók a címkék a Gitben?
- A címkék pillanatfelvételeket készítenek a tároló állapotáról, amelyek súlyos problémák esetén visszaállíthatók.
- : Miért használja?
- Szűrők alkalmazása a múltra, a szerző és a megbízó adatainak módosítása az összes véglegesítés során, az előzmények átírása érdekében.
- Mi különbözteti meg a hétköznapi lökdösődéstől?
- Az ütközésektől függetlenül a helyi változtatásokat a távoli lerakat lecserélésére kényszeríti.
- Mikor használható ?
- Ha vissza kell állítania az ágat egy bizonyos véglegesítésre, és el kell távolítania a nem véglegesített módosításokat, ezt a módszert kell alkalmaznia.
- Milyen biztonsági intézkedéseket kell betartani a használat során ?
- Mivel ez a parancs átírja az előzményeket, és adatvesztést okozhat, ha nem megfelelően használják, ezért mindenképpen készítsen biztonsági másolatot a lerakatról.
- How can a faulty rebase be undone with the aid of ?
- Minden referenciamódosítás megjelenítésével megkeresheti az újrabázis előtti véglegesítési hash-t, és megfelelően beállíthatja az ágat.
Nehéz lehet a Git-előzmények szerzői adatainak frissítése a véglegesítési dátumok megváltoztatása nélkül, de a megfelelő parancsokkal ez elérhető. A véglegesítési előzmények biztonságosak, ha a git reflog-ot használja a múltbeli állapotok megtekintéséhez és a git filter-branch-t a szerző adatainak módosításához. Az adatvesztés elkerülése érdekében az ilyen feladatok elvégzése előtt mindig készítsen biztonsági másolatot a tárhelyről. Ezek az intézkedések támogatják a megbízható és pontos projektdokumentáció fenntartását.