உங்கள் ஜிட் கமிட் வரலாற்றை மீட்டெடுத்தல்: ஒரு படி-படி-படி வழிகாட்டி
எனது user.name மற்றும் user.email ஆகியவை தவறாக அமைக்கப்பட்டிருந்தன, தனிப்பட்ட திட்டத்தில் ஒரு மாத கடின முயற்சிக்குப் பிறகு நான் கண்டுபிடித்தேன். நான் இந்தத் திருத்தங்களைச் செய்த பிறகும், எனது முந்தைய கமிட்களில் தவறான ஆசிரியரின் பெயர் இருப்பதை நீண்ட காலத்திற்குப் பிறகு கண்டுபிடித்தேன். இந்த கமிட்களை மாற்றுவதன் மூலம் எனது பங்களிப்பு வரைபடத்தைப் புதுப்பிக்கும் முயற்சியில் ஒரு ஜிட் மறுசீரமைப்பை முயற்சித்தேன்.
ஆனால் அவ்வாறு செய்வதன் மூலம், கமிட் தேதிகள் தற்செயலாக மாற்றப்பட்டன, எல்லா கமிட்களும் ஒரே நேரத்தில் செய்யப்பட்டதாகத் தெரிகிறது. இத்தகைய தற்செயலான மாற்றத்திற்குப் பிறகு, இந்த பயிற்சியானது உங்களின் அசல் உறுதி வரலாற்றை மீண்டும் பெற உங்களுக்கு உதவ முயற்சிக்கிறது, இதனால் உங்கள் பங்களிப்புகள் சரியான முறையில் பிரதிபலிக்கப்படும்.
கட்டளை | விளக்கம் |
---|---|
git reflog | குறிப்புப் பதிவில் மறுதளங்கள் மற்றும் மீட்டமைப்புகள் உட்பட அனைத்து களஞ்சிய மாற்றங்களின் வரலாற்றையும் காட்டுகிறது. |
git reset --hard | வேலை செய்யும் அடைவு மற்றும் ஸ்டேஜிங் பகுதியில் செய்யப்பட்ட அனைத்து மாற்றங்களையும் நீக்குகிறது மற்றும் தேர்ந்தெடுக்கப்பட்ட கமிட்டிக்கு தற்போதைய கிளையை மீட்டமைக்கிறது. |
git push --force | உள்ளூர் மாற்றங்களை ரிமோட் களஞ்சியத்திற்குத் தள்ளும்படி கட்டாயப்படுத்துகிறது, இது முந்தைய முரண்பாடுகளை அழிக்கிறது. |
git filter-branch --env-filter | ஒவ்வொரு உறுதிப்பாட்டிற்கும் வடிப்பானைப் பயன்படுத்துகிறது, Git வரலாற்றை மீண்டும் எழுதுகிறது மற்றும் ஆசிரியர் மற்றும் கமிட்டர் தரவு போன்ற சூழல் மாறிகளில் மாற்றங்களைச் செயல்படுத்துகிறது. |
WRONG_EMAIL="wrong@example.com" | முந்தைய கமிட்களுக்குப் பயன்படுத்தப்பட்ட பிழையான மின்னஞ்சல் முகவரியைக் கண்காணிக்க ஒரு மாறியை உருவாக்குகிறது. |
CORRECT_NAME="Correct Name" | திருத்தப்பட்ட வரலாற்றில் எந்த பெயரை மாற்ற வேண்டும் என்பதைக் குறிக்க ஒரு மாறியை நிறுவுகிறது. |
CORRECT_EMAIL="correct@example.com" | புதுப்பிக்கப்பட்ட வரலாற்றில் பழைய மின்னஞ்சல் முகவரிக்குப் பதிலாக எந்த மின்னஞ்சல் முகவரியைப் பயன்படுத்த வேண்டும் என்பதைக் குறிக்க ஒரு மாறியை அமைக்கிறது. |
export GIT_COMMITTER_NAME | மீண்டும் எழுதப்பட்ட கமிட்களுக்கு கொடுக்கப்பட்ட மதிப்புக்கு கமிட்டர் பெயரை அமைக்கிறது. |
export GIT_COMMITTER_EMAIL | மீண்டும் எழுதப்பட்ட கமிட்களுக்கான கொடுக்கப்பட்ட மதிப்புக்கு கமிட்டர் மின்னஞ்சலை அமைக்கிறது. |
export GIT_AUTHOR_NAME | மீண்டும் எழுதப்பட்ட கமிட்களுக்கான தேர்ந்தெடுக்கப்பட்ட மதிப்பிற்கு ஆசிரியர் பெயரை மாற்றுகிறது. |
export GIT_AUTHOR_EMAIL | மீண்டும் எழுதப்பட்ட கமிட்களுக்கான நியமிக்கப்பட்ட மதிப்புக்கு ஆசிரியர் மின்னஞ்சலை மாற்றுகிறது. |
--tag-name-filter cat | கொடுக்கப்பட்ட வடிப்பானைப் பயன்படுத்தி குறிச்சொற்கள் மீண்டும் எழுதப்படுவதை உறுதிசெய்கிறது. |
Git வரலாற்றின் மறுசீரமைப்பைப் புரிந்துகொள்வது
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 வழங்கப்பட்ட ஸ்கிரிப்டுகள், Git இன் உறுதிமொழி வரலாற்றை சரிசெய்வதற்கும் மீட்டெடுப்பதற்கும் ஆகும், குறிப்பாக கவனக்குறைவான மறுசீரமைப்பு கமிட் தேதிகளை மாற்றியமைக்கும் சந்தர்ப்பங்களில். முதல் ஸ்கிரிப்ட்டில், strong>git reflog ஐப் பயன்படுத்தி மறுபேஸ் செயல்முறைக்கு முன் கமிட் ஹாஷ் கண்டறியப்பட்டது.. இந்த கட்டளையானது ரீசெட் மற்றும் ரீபேஸ்கள் உட்பட அனைத்து களஞ்சிய மாற்றங்களின் வரலாற்றைக் காட்டுகிறது. தொடர்புடைய கமிட் ஹாஷைக் கண்டறிந்ததும், கிளையைப் பயன்படுத்தி அந்த உறுதிக்கு மீட்டமைக்கப்படும் git reset --hard கட்டளை, அதன் மூலம் அனைத்து அடுத்தடுத்த மாற்றங்களையும் அழிக்கிறது. இது ஒரு முக்கியமான படியாகும், ஏனெனில் இது தவறான மறுதளத்திற்கு முன் அதன் முந்தைய நிலைக்கு களஞ்சியத்தை மீட்டமைக்கிறது. உள்ளூர் மாற்றங்கள் பின்னர் ரிமோட் களஞ்சியத்தை பயன்படுத்தி தள்ளப்படும் git push --force கட்டளை, முந்தைய வரலாற்றை மீட்டமைக்கும் கிளையுடன் மேலெழுதும்.
இரண்டாவது ஸ்கிரிப்ட்டின் நோக்கம், கமிட் தேதிகளை மாற்றாமல், கமிட் ஆசிரியர் விவரங்களை புதுப்பிப்பதாகும். என்ற பயன்பாட்டுடன் git filter-branch --env-filter கட்டளை, ஆசிரியர் மற்றும் கமிட்டர் விவரங்கள் போன்ற சூழல் மாறிகள் அனைத்து கமிட்களிலும் மாற்றப்படலாம். துல்லியமற்ற விவரங்களைக் கண்டறிந்து புதிய, சரியானவற்றை விவரிக்க, போன்ற மாறிகள் WRONG_EMAIL, CORRECT_NAME, மற்றும் CORRECT_EMAIL வரையறுக்கப்பட்டுள்ளன. அடுத்து, ஸ்கிரிப்ட் பயன்படுத்தி கமிட்டர் விவரங்களை புதுப்பிக்கிறது export GIT_COMMITTER_NAME மற்றும் export GIT_COMMITTER_EMAIL; அதேபோல், இது பயன்படுத்தி ஆசிரியர் விவரங்களை புதுப்பிக்கிறது export GIT_AUTHOR_NAME மற்றும் export GIT_AUTHOR_EMAIL. விருப்பம் --tag-name-filter cat கொடுக்கப்பட்ட வடிப்பான்களைப் பயன்படுத்தி குறிச்சொற்கள் மீண்டும் எழுதப்படும் என்று உத்தரவாதம் அளிக்கிறது. இந்த ஸ்கிரிப்ட் அசல் கமிட் தேதிகளை பாதிக்காமல் சரியான ஆசிரியர் தகவலுடன் உறுதி வரலாற்றை மீண்டும் எழுத பயன்படுத்தப்படலாம்.
Git இன் அசல் உறுதி வரலாற்றை மீண்டும் கொண்டு வருதல்
Git கட்டளைகளைப் பயன்படுத்துதல்
# 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
தேதிகளை ஒரே மாதிரியாக வைத்திருக்கும் போது கமிட் ஆசிரியர் விவரங்களை மீண்டும் எழுதுதல்
Git வடிகட்டி-கிளையைப் பயன்படுத்துதல்
# 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
தரவை இழக்காமல் Git ஐப் பயன்படுத்தி வரலாற்றை மீட்டமைத்தல்
The use of strong>git cherry-pick இன் பயன்பாடு Git வரலாற்றை மீட்டெடுப்பதில் பணிபுரியும் போது கணக்கில் எடுத்துக்கொள்ள வேண்டிய மற்றொரு காரணியாகும். இந்த கட்டளையுடன் தற்போதைய கிளைக்கு முந்தைய கமிட்களால் செய்யப்பட்ட மாற்றங்களை நீங்கள் பயன்படுத்தலாம். தற்செயலாக மாற்றப்பட்ட வரலாற்றை நீங்கள் கைமுறையாக மறுகட்டமைக்க வேண்டியிருக்கும் போது, அது மிகவும் உதவியாக இருக்கும். எடுத்துக்காட்டாக, மறுசீரமைப்பு அல்லது மீட்டமைப்பு தவறாகி, தனிப்பட்ட மாற்றங்களைச் சேர்க்க விரும்பினால், நீங்கள் பயன்படுத்தலாம் git cherry-pick அவ்வாறு செய்ய. இந்த நுட்பம், அசல் உறுதி தேதிகள் மற்றும் செய்திகளைப் பாதுகாப்பதன் மூலம் உங்கள் திட்டத்தின் வரலாற்றை அப்படியே வைத்திருக்கும்.
strong>ஜிட் ரெஃப்லாக் கூடுதல் பயனுள்ள கட்டளை. கிளைகளின் குறிப்புகள் மற்றும் பிற களஞ்சிய குறிப்புகளில் செய்யப்பட்ட அனைத்து மாற்றங்களின் வரலாற்றையும் இது காட்டுகிறது, அவை பெரும்பாலும் பார்வையில் இருந்து மறைக்கப்பட்டவை. git log. சாதகமற்ற மீட்டமைப்புகள் அல்லது மறுதளங்களின் போது மேலெழுதப்பட்ட அல்லது இழக்கப்பட்ட கமிட் ஹாஷ்களைக் கண்டறிய இது உங்களை அனுமதிக்கிறது. கலவையைப் பயன்படுத்துதல் git reflog மற்றும் 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 , உங்கள் கிளையை பழைய நிலைக்கு மீட்டமைப்பதன் மூலம் மாற்றங்களை மாற்றியமைக்கலாம். மேலும், strong>git tag ஐப் பயன்படுத்தி எப்போதாவது உங்கள் களஞ்சியத்தின் நிலையைப் பற்றிய ஸ்னாப்ஷாட்களை எடுப்பது முக்கியம்.. குறிச்சொற்கள் பயனுள்ளதாக இருக்கும், ஏனெனில் அவை கடுமையான சிக்கல்களின் போது செயல்தவிர்க்கக்கூடிய குறிப்பிட்ட வரலாற்று தருணங்களை விவரிக்க அனுமதிக்கின்றன.
Git வரலாற்றை மீட்டெடுப்பது தொடர்பாக அடிக்கடி கேட்கப்படும் கேள்விகள்
- நோக்கம் என்ன git cherry-pick?
- தற்போதைய கிளைக்கு முந்தைய கமிட்களால் செய்யப்பட்ட மாற்றங்களைப் பயன்படுத்துவதன் மூலம் வரலாற்றை கைமுறையாக மறுகட்டமைக்க இது உதவுகிறது.
- What role does என்ன பங்கு strong>ஜிட் reflog கடந்த காலத்தைப் பாதுகாப்பதில் விளையாடுவதா?
- கிளை உதவிக்குறிப்புகள் மற்றும் குறிப்புகளில் செய்யப்பட்ட அனைத்து மாற்றங்களின் வரலாற்றைக் காண்பிப்பதன் மூலம் இழந்த கமிட்களை மீட்டெடுக்க இது உதவுகிறது.
- என்ன செய்கிறது git reset --hard அர்த்தம்?
- இது வேலை செய்யும் அடைவு மற்றும் ஸ்டேஜிங் பகுதியில் செய்யப்பட்ட அனைத்து மாற்றங்களையும் அழித்து, தற்போதைய கிளையை ஒரு குறிப்பிட்ட உறுதிக்கு மீட்டமைக்கிறது.
- Git இல் குறிச்சொற்களின் பயன் என்ன?
- குறிச்சொற்கள் களஞ்சியத்தின் நிலையின் ஸ்னாப்ஷாட்களை எடுக்கின்றன, கடுமையான சிக்கல்கள் ஏற்பட்டால் அதை மீட்டெடுக்க முடியும்.
- git filter-branch: அதை ஏன் பயன்படுத்த வேண்டும்?
- கடந்த காலத்திற்கு வடிப்பான்களைப் பயன்படுத்துதல், வரலாற்றை மீண்டும் எழுதுவதற்காக, அனைத்து கமிட்களிலும் ஆசிரியர் மற்றும் கமிட்டி விவரங்களை மாற்றுதல்.
- எதை வேறுபடுத்துகிறது a git push --force ஒரு சாதாரண உந்துதல் இருந்து?
- முரண்பாடுகளைப் பொருட்படுத்தாமல், தொலைநிலைக் களஞ்சியத்தை மாற்றுவதற்கு உள்ளூர் மாற்றங்களை இது கட்டாயப்படுத்துகிறது.
- எப்போது பயன்படுத்துவது நல்லது git reset --hard?
- நீங்கள் கிளையை ஒரு குறிப்பிட்ட உறுதிக்கு மீட்டமைக்க வேண்டும் மற்றும் உறுதியற்ற மாற்றங்களை அகற்ற வேண்டும், இது நீங்கள் பயன்படுத்தும் முறையாக இருக்க வேண்டும்.
- பயன்படுத்தும் போது என்ன பாதுகாப்பு நடவடிக்கைகள் பின்பற்றப்பட வேண்டும் git filter-branch?
- இந்த கட்டளை வரலாற்றை மீண்டும் எழுதுகிறது மற்றும் சரியாகப் பயன்படுத்தப்படாவிட்டால் தரவு இழப்பை ஏற்படுத்தலாம், நீங்கள் களஞ்சியத்தை காப்புப் பிரதி எடுக்கிறீர்கள் என்பதை உறுதிப்படுத்தவும்.
- How can a faulty rebase be undone with the aid of strong>git reflog உதவியுடன் தவறான மறுசீரமைப்பை எவ்வாறு செயல்தவிர்க்க முடியும்?
- ஒவ்வொரு குறிப்பு மாற்றத்தையும் காண்பிப்பதன் மூலம், ரீபேஸ் செய்வதற்கு முன் கமிட் ஹாஷைக் கண்டறிந்து, கிளையை சரியான முறையில் சரிசெய்யலாம்.
Git வரலாற்றை மீட்டெடுப்பது பற்றிய முடிவுரைகள்
கமிட் தேதிகளை மாற்றாமல் உங்கள் Git வரலாற்றில் ஆசிரியர் தகவலைப் புதுப்பிப்பது கடினமாக இருக்கலாம், ஆனால் சரியான கட்டளைகளுடன், அதை அடைய முடியும். நீங்கள் கடந்த நிலைகளைப் பார்க்க git reflog மற்றும் ஆசிரியர் விவரங்களை மாற்ற git வடிகட்டி-கிளையைப் பயன்படுத்தும்போது உங்கள் உறுதி வரலாறு பாதுகாப்பானது. தரவை இழப்பதைத் தவிர்க்க, இதுபோன்ற பணிகளைச் செய்வதற்கு முன் எப்போதும் உங்கள் களஞ்சியத்தை காப்புப் பிரதி எடுக்க மறக்காதீர்கள். இந்த செயல்கள் நம்பகமான மற்றும் துல்லியமான திட்ட ஆவணங்களை பராமரிப்பதை ஆதரிக்கும்.