🎧 Listen to this article: English
🌍 Read this in your language: हिंदी · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
కోడ్లో మెర్జ్ కాన్ఫ్లిక్ట్లు చాలా చికాకుగా ఉంటాయి. అవి ఇమేజ్ ఫైల్లో జరిగినప్పుడు, చాలా మంది స్తంభించిపోతారు — ఒక చిత్రానికి "diff view" ఉండదు మరియు GitHubలోని సాధారణ ఫிக்స్-ఇట్-ఇన్-ది-బ్రౌజర్ బటన్ అసలు ఉండదు. ఈ పోస్ట్ సరిగ్గా అదే విధమైన నిజమైన సందర్భాన్ని వివరిస్తుంది: ఏమి పనిచేయలేదు మరియు ఏమి పనిచేసింది.
నేటికి, ఆగస్ట్ 29, 2026 నాటికి, ఇది అర్థం చేసుకోవడం చాలా ముఖ్యం, ఎందుకంటే ఎక్కువ చిన్న బృందాలు Git ద్వారా కంటెంట్ ఎక్కువగా ఉండే వెబ్సైట్లను నడుపుతున్నాయి, డెస్క్టాప్ యాప్ ద్వారా నాన్-టెక్నికల్ వ్యక్తులు టెక్స్ట్ మరియు ఇమేజ్ మార్పులను పుష్ చేస్తున్నారు. ఆ కలయిక — సాధారణ-భాషలో ఉండే కంటెంట్ ఎడిటర్లు, బైనరీ ఫైల్లు మరియు ఒక నిజమైన డిప్లాయ్ పైప్లైన్ — సరిగ్గా ఇక్కడే ఈ సమస్య కనిపిస్తుంది.
సెటప్: రెండు బ్రాంచ్లు, ఒక షేర్ చేయబడిన ఇమేజ్
ఈ ప్రాజెక్ట్ ఒక సాధారణ రెండు-బ్రాంచ్ల వర్క్ఫ్లోను ఉపయోగిస్తుంది. staging ఇక్కడే రోజువారీ పనులు జరుగుతాయి — కంటెంట్ ఎడిటర్ అక్కడ మార్పులను స్వేచ్ఛగా పుష్ చేస్తారు మరియు అది ఆటోమేటిక్గా ప్రివ్యూ సైట్కు డిప్లాయ్ అవుతుంది. main అనేది నిజమైన లైవ్ సైట్, సమీక్షించబడిన Pull Request నుండి వచ్చినప్పుడు మాత్రమే అప్డేట్ అవుతుంది staging దీనితో మెర్జ్ చేయబడుతుంది.
టీమ్ ఇటీవల సైట్ యొక్క ఇమేజ్లను WebPకి కన్వర్ట్ చేసింది, ఇది అదే విజువల్ క్వాలిటీ వద్ద PNG లేదా JPG కంటే చాలా చిన్నదైన ఆధునిక ఫార్మాట్. ఇప్పుడు ప్రతి ఇమేజ్ ఒక జతగా ఉంది: అసలైన .png, మరియు దానికి సరిపోలే .webp, ఒక HTML తో వైర్ చేయబడి ఉంటాయి <picture> ఎలిమెంట్ వలన WebPకి అనుకూలమైన బ్రౌజర్లు ఆటోమేటిక్గా చిన్న ఫైల్ను పొందుతాయి, మిగతావన్నీ అసలు ఫైల్కి ఫాల్ బ్యాక్ అవుతాయి.
ఆ తర్వాత దాదాపు ఒకే సమయంలో రెండు వేర్వేరు బ్రాంచ్లలో రెండు విషయాలు జరిగాయి: ఒకరు ఒక ప్రోడక్ట్ స్క్రీన్షాట్కి చిన్న, డైరెక్ట్ ఎడిట్ చేశారు mainలో, సాధారణ రివ్యూ ఫ్లోను బైపాస్ చేసి, మరొక వైపు కంటెంట్ ఎడిటర్ ప్రత్యేకంగా అదే స్క్రీన్షాట్ యొక్క నిజమైన కొత్త వెర్షన్ను అప్లోడ్ చేశారు stagingద్వారా. రెండు ఎడిట్లు ఒకే ఫైల్ పాత్ను తాకాయి. ఇరు పక్షాలకు ఒకరి గురించి ఒకరికి తెలియదు.
GitHub వెబ్సైట్ దీన్ని ఎందుకు పరిష్కరించలేకపోయింది
కంటెంట్ ఎడిటర్ దీన్ని తీసుకురావడానికి Pull Requestను తెరిచినప్పుడు staging అప్డేట్ను ఇందులోకి main, GitHub వెంటనే ఫ్లాగ్ చేసింది: "This branch has conflicts that must be resolved." సాధారణంగా, క్లిక్ చేయడం వలన మీకు ఒక టెక్స్ట్ ఫైల్ యొక్క రెండు వెర్షన్లను పక్కపక్కనే చూపే వెబ్-ఆధారిత ఎడిటర్ వస్తుంది, తద్వారా మీరు ఏ లైన్లను ఉంచుకోవాలో ఎంచుకోవచ్చు.
ఇమేజ్ల కోసం ఆ ఎడిటర్ లేదు. GitHub యొక్క బ్రౌజర్ ఆధారిత కాన్ఫ్లిక్ట్ రిజల్యూషన్ కేవలం లైన్-ఆధారిత టెక్స్ట్ను మాత్రమే అర్థం చేసుకుంటుంది — కోడ్, మార్క్డౌన్, కాన్ఫిగ్ ఫైల్స్. ఒక PNG లేదా WebP ఫైల్లో పోల్చడానికి ఎలాంటి "lines" ఉండవు. దీన్ని పరిష్కరించగల బటన్ లేదు, వ్యూ లేదు, వెబ్సైట్ ద్వారా మార్గం లేదు, ఎవరైనా ఎంత జాగ్రత్తగా క్లిక్ చేసినా సరే. స్పష్టంగా చెప్పాలంటే: కంటెంట్ ఎడిటర్ ఎటువంటి తప్పు చేయడం లేదు. ఆ టూల్కి ఈ నిర్దిష్ట సమస్యను పరిష్కరించడానికి నిజంగా ఎలాంటి మార్గం లేదు.
దాగి ఉన్న రెండవ సమస్య
దీన్ని పరిష్కరించడానికి ఫైల్ యొక్క రెండు వెర్షన్లను లోకల్గా పుల్ చేసి, వాటిని నేరుగా పోల్చడం అవసరం — ఇక్కడే ఒక స్నీకీ సమస్య తలెత్తింది. కొత్త స్క్రీన్షాట్ ఇక్కడ ఉంది staging ఇది మునుపటి కంటే పెద్ద మరియు హై-రిజల్యూషన్ కలిగిన నిజమైన అప్డేట్. కానీ దాని జతగా ఉన్న WebP ఫైల్ను చాలా కాలంగా తాకలేదు — డైమెన్షన్లు కూడా సరిపోలలేదు. కొత్త PNG 1024 బై 1024 పిక్సెల్లుగా ఉంది; దాని పక్కన ఉన్న WebP ఇప్పటికీ 750 బై 750 వద్దే ఉంది, ఇది పూర్తిగా పాత వెర్షన్ ఇమేజ్ నుండి మిగిలిపోయినది.
అంటే కాన్ఫ్లిక్ట్లో కేవలం "picking a side" — ఏదైనా ఒక వెర్షన్ను పూర్తిగా ఉంచుకోవడం — సరిపోలని జతను షిప్ చేస్తుంది. PNG కొత్త స్క్రీన్షాట్ను చూపుతుంది, కానీ WebPని ప్రిఫర్ చేసే బ్రౌజర్ ఉన్న ఏ సందర్శకుడైనా (చాలా ఆధునిక బ్రౌజర్లు) సైలెంట్గా పాత, తప్పు ఇమేజ్ను చూస్తారు. కాన్ఫ్లిక్ట్ మెసేజ్ అదృశ్యమవుతుంది; అసలు బగ్ గుర్తించబడకుండా షిప్ అవుతుంది.
దశ 1: రెండు వెర్షన్లను సరిగ్గా పోల్చండి
మొదటి దశ దేనినీ పరిష్కరించడం కాదు — వాస్తవానికి ఏమి మారింది మరియు ఎక్కడ మారిందో అర్థం చేసుకోవడానికి, ఫైల్ పరిమాణాలు మరియు రెండు బ్రాంచ్లలోని డైమెన్షన్లను వాటి కామన్ స్టార్టింగ్ పాయింట్తో పోల్చడం.
git fetch origin
git diff --stat origin/main origin/staging -- path/to/image.png path/to/image.webp
చివరిసారిగా షేర్ చేసినప్పటి నుండి రెండు బ్రాంచ్లు స్వతంత్రంగా ఫైల్ను సవరించాయని ఇది చూపించింది — కేవలం "one side is newer" అని మాత్రమే కాకుండా నిజమైన త్రీ-వే డైవర్జెన్స్.
దశ 2: ఏ వెర్షన్ వాస్తవానికి సరైనదో గుర్తించండి
రెండు PNGలను పక్కపక్కనే ఓపెన్ చేయడం వలన ఇది నిర్ధారించబడింది staging వెర్షన్ నిజమైనది, అనుకున్న అప్డేట్, తప్పు లేదా కరప్ట్ అయిన ఫైల్ కాదు.
దశ 3: సరైన మూలం నుండి WebPని మళ్లీ జనరేట్ చేయండి
రెండు వేర్వేరు బైనరీ ఫైల్లను మెర్జ్ చేయడానికి ప్రయత్నించే బదులు — ఇది సాధ్యం కాదు — పరిష్కారం ఏమిటంటే WebPని ఒకదానిగా పరిగణించడం నుండి ఉద్భవించింది PNG నుండి, సర్దుబాటు చేయడానికి ప్రత్యేక ఫైల్ కాదు:
cwebp -q 82 image.png -o image.webp
ఇది సరైన 1024 బై 1024 డైమెన్షన్ల వద్ద కొత్త WebPని ఉత్పత్తి చేసింది, కొత్త PNGకి సరిగ్గా సరిపోలుతుంది. -q 82 అనేది కేవలం క్వాలిటీ సెట్టింగ్ — ఫైల్ పరిమాణం మరియు షార్ప్నెస్ మధ్య మంచి బ్యాలెన్స్.
దశ 4: మెర్జ్ను పూర్తి చేయండి మరియు ధృవీకరించండి
git checkout staging
git merge origin/main
git checkout --ours path/to/image.png # keep the staging PNG
cp image-regenerated.webp path/to/image.webp # use the freshly regenerated WebP
git add path/to/image.png path/to/image.webp
git commit
git push origin staging
దీని తర్వాత, Pull Request క్లీన్గా మరియు మెర్జ్ చేయదగినదిగా చూపబడింది, మరియు లైవ్ సైట్ WebP-సామర్థ్యం ఉన్నా లేకున్నా ప్రతి సందర్శకుడికి కొత్త స్క్రీన్షాట్ను సరిగ్గా అందించింది.
పరిశీలించబడిన మరియు తిరస్కరించబడిన పద్ధతులు
ఈ దారిలో కొన్ని వేగంగా కనిపించే షార్ట్కట్లు వచ్చాయి, ప్రతి దాని గురించి తెలుసుకోవడం విలువైనదే మరియు అది ఎందుకు ఉపయోగించబడలేదో తెలుసుకోవడం కూడా విలువైనదే.
డెస్క్టాప్ Git క్లయింట్లో వెర్షన్ను ఎంచుకోవడం. చాలా Git డెస్క్టాప్ యాప్లు "use my version" లేదా "use theirs" ఎంచుకోవడం ద్వారా బైనరీ కాన్ఫ్లిక్ట్ను పరిష్కరించుకోవడానికి మిమ్మల్ని అనుమతిస్తాయి — ఎటువంటి పోలిక లేదు, కేవలం హోల్సేల్ ఎంపిక. నాన్-టెక్నికల్ టీమ్ మెంబర్ దీన్ని స్వయంగా చేయగలరు. కానీ ఇక్కడే సమస్య ఉంది: ఇది పాత, సరిపోలని WebP ఫైల్ను ఉంచుతుంది, పైన వివరించిన అదే సైలెంట్ బగ్ను షిప్ చేస్తుంది. వేగంగా ఉంటుంది, కానీ తప్పు.
స్ట్రాటజీ ఫ్లాగ్తో మెర్జ్ను ఫోర్స్ చేయడం. కమాండ్ లైన్ నుండి, git merge origin/main -X ours (లేదా -X theirs) అనేది అడగడానికి ఆగకుండా, ప్రతి ఫైల్ కోసం ఒక మొత్తం వైపును ఎంచుకోవడం ద్వారా ఏదైనా కాన్ఫ్లిక్ట్ను స్వయంచాలకంగా పరిష్కరించమని Gitకి చెబుతుంది:
git merge origin/main -X ours
డెస్క్టాప్ యాప్లో వెర్షన్ను ఎంచుకోవడంలో ఉన్న అదే లోపం దీనికి కూడా ఉంది — Git కాన్ఫ్లిక్ట్ ఉన్న బైనరీ ఫైల్ను ఒక విడదీయరాని బ్లాక్గా పరిగణిస్తుంది, కాబట్టి అది లోపలికి వెళ్లి కేవలం సరిపోలని సగాన్ని మాత్రమే సరిదిద్దలేదు.
ముందుగా బేస్ బ్రాంచ్ నుండి ఫైల్ను తొలగించడం. సిద్ధాంతం: లైవ్ బ్రాంచ్లో ఆ ఫైల్ లేనట్లయితే, కాన్ఫ్లిక్ట్ కావడానికి ఏమీ ఉండదు, కాబట్టి మెర్జ్ సజావుగా జరగాలి. ఇది కేవలం అనుకోవడం కంటే ఐసోలేటెడ్ బ్రాంచ్లో నేరుగా పరీక్షించబడింది:
git rm image.png image.webp
git commit -m "test: delete file"
git merge origin/staging
ఫలితం క్లీన్ మెర్జ్ కాలేదు. బ్రాంచ్లు విడిపోయిన సమయంలో ఫైల్ ఉనికిలో ఉందని Git గుర్తుంచుకుంటుంది, కాబట్టి దానిని ఒక వైపు తొలగించడం మరొక వైపు అది మారుతున్నప్పుడు కాన్ఫ్లిక్ట్ను సృష్టిస్తుంది — "modify/delete" కాన్ఫ్లిక్ట్, దాని స్వంత వార్నింగ్ మెసేజ్తో. ఇది సమస్యను స్కిప్ చేయడానికి బదులుగా దాన్ని రీలేబుల్ చేస్తుంది.
కాన్ఫ్లిక్ట్పై ఫోర్స్-పుష్ చేయడం. మరింత తీవ్రమైన ఎంపిక ఏమిటంటే, ఫోర్స్ పుష్ ద్వారా లైవ్ బ్రాంచ్ను పూర్తిగా మరొక బ్రాంచ్ హిస్టరీతో ఓవర్రైట్ చేయడం. ఇది నిజంగా కాన్ఫ్లిక్ట్ రిజల్యూషన్ కాదు — ఇది ఒక వైపు ఉన్న మార్పులను పూర్తిగా విస్మరించడమే, దీని ద్వారా ఇతరుల నిజమైన పనిని సైలెంట్గా కోల్పోయే ప్రమాదం ఉంది. లైవ్ సైట్కి డిప్లాయ్ అయ్యే బ్రాంచ్పై, ఇది నిజంగా ప్రమాదకరమైన చర్య, తీసుకోవాల్సిన షార్ట్కట్ కాదు.
ముగింపు
బైనరీ ఫైల్ కాన్ఫ్లిక్ట్లు — ఇమేజ్లు, PDFలు, కంపైల్ చేయబడిన ఫైల్లు, సాదా వచనం కానివి ఏవైనా సరే — కోడ్ కాన్ఫ్లిక్ట్ల వలె పరిష్కరించబడవు. తార్కికంగా ఆలోచించడానికి ఎలాంటి లైన్-బై-లైన్ diff లేదు. ఉన్న ఒకే ఒక నిజమైన ఎంపిక ఏమిటంటే ఒక వెర్షన్ను పూర్తిగా ఎంచుకోవడం, లేదా రెండు వెర్షన్లు ఒక ఇమేజ్ మరియు దాని ఆప్టిమైజ్ చేసిన కాపీ లాగా వాస్తవానికి సరిపోలిన జత అయినప్పుడు, సరైన మూలం నుండి డెరైవ్డ్ ఫైల్ను మళ్లీ జనరేట్ చేయడం. మీరు ఏ పరిస్థితిలో ఉన్నారో అర్థం చేసుకోవడమే అసలు పోరాటం.
ప్రయోజనాలు
- డెరైవ్డ్ ఫైల్ను (ఈ సందర్భంలో WebPని) మళ్లీ జనరేట్ చేయడం, ఏ వైపు నమ్మాలి అని ఊహించే బదులు స్థిరత్వానికి హామీ ఇస్తుంది.
- నమ్మే ముందు ప్రమాదకరంగా కనిపించే షార్ట్కట్ను ఐసోలేటెడ్ బ్రాంచ్లో పరీక్షించడం వలన తప్పుడు అంచనాలను సులభంగా పట్టుకోవచ్చు.
- అసలైన ఫైల్ ఫార్మాట్ను ఫాల్ బ్యాక్గా ఉంచడం (దీని ద్వారా
<picture>ఎలిమెంట్, ఈ సందర్భంలో) అంటే తాత్కాలికంగా విరిగిన ఆప్టిమైజ్డ్ కాపీ కూడా సందర్శకుడికి పేజీని ఎప్పుడూ పూర్తిగా బ్రేక్ చేయదు.
లోపాలు
- ఫాస్ట్ ఆప్షన్లు ఏవీ (pick-a-version, forced merge strategy, deleting and re-merging) వాస్తవానికి మిస్మ్యాచ్డ్-పెయిర్ సమస్యను పరిష్కరించవు — అవి కాన్ఫ్లిక్ట్ మెసేజ్ను అదృశ్యం చేస్తాయంతే.
- దీన్ని సరిగ్గా పరిష్కరించడానికి డైరెక్ట్ సర్వర్ లేదా కమాండ్-లైన్ యాక్సెస్ మరియు ఇమేజ్-కన్వర్షన్ టూల్ అవసరం, ఇది కేవలం బ్రౌజర్-మాత్రమే లేదా డెస్క్టాప్-యాప్-మాత్రమే ఉన్న వర్క్ఫ్లో చేయగలిగే దానికి వెలుపల ఉంది.
- దీనికి గల అసలు కారణం — సాధారణ రివ్యూ ఫ్లోను బైపాస్ చేసి లైవ్ బ్రాంచ్కి డైరెక్ట్ ఎడిట్ చేయడం — అనేది ఒక ప్రాసెస్ గ్యాప్, దీన్ని ఒకసారి చేసే టెక్నికల్ పరిష్కారం మళ్లీ జరగకుండా నిరోధించదు.
హెచ్చరిక
ఈ ఆర్టికల్ విద్యాపరమైనది మరియు సాధారణ పదాలలో ఒక నిజమైన పరిస్థితిని వివరిస్తుంది; నిర్దిష్ట ఫైల్ పేర్లు, పాత్లు మరియు ఐడెంటిఫైయర్లు సాధారణీకరించబడ్డాయి. ఇక్కడ చూపబడిన కమాండ్లు రియల్ ఫైల్లను మరియు బ్రాంచ్ హిస్టరీని సవరించగలవు లేదా విస్మరించగలవు — ఎల్లప్పుడూ ఐసోలేటెడ్ బ్రాంచ్లో లేదా త్రోఅవే కాపీలో ముందుగా పరీక్షించండి, మీ నిర్దిష్ట పరిస్థితిలో "ours" మరియు "theirs" ఏ దిశను సూచిస్తున్నాయో అర్థం చేసుకోండి మరియు బలవంతంగా కాన్ఫ్లిక్ట్ను పరిష్కరించే దేనినైనా రన్ చేయడానికి ముందు మీకు బ్యాకప్ లేదా రికవరీ మార్గం ఉందని నిర్ధారించుకోండి. దానిపై ఆధారపడే ముందు మీ స్వంత రిపోజిటరీ యొక్క వాస్తవ స్థితిని బట్టి ఏదైనా కమాండ్ను వెరిఫై చేయండి.
తరచుగా అడిగే ప్రశ్నలు
- GitHub వెబ్సైట్ ఇమేజ్ ఫైల్లలో కాన్ఫ్లిక్ట్లను ఎందుకు పరిష్కరించలేదు? — దీని బ్రౌజర్ ఆధారిత కాన్ఫ్లిక్ట్ ఎడిటర్ కేవలం లైన్-ఆధారిత టెక్స్ట్ను మాత్రమే అర్థం చేసుకుంటుంది; ఆ ఇంటర్ఫేస్ ద్వారా PNG లేదా WebP వంటి బైనరీ డేటాను పోల్చడానికి లేదా మెర్జ్ చేయడానికి ఎటువంటి మార్గం లేదు.
- ఒక "modify/delete" కాన్ఫ్లిక్ట్ అంటే ఏమిటి? — ఒక బ్రాంచ్ ఫైల్ను తొలగించినప్పుడు మరియు వారు చివరిసారి హిస్టరీ షేర్ చేసుకున్న తర్వాత మరొక బ్రాంచ్ దానిని మార్చినప్పుడు ఇది జరుగుతుంది; ఏ మార్పు గెలవాలో ఊహించే బదులు Git దీన్ని ఫ్లాగ్ చేస్తుంది.
- ఒక బ్రాంచ్ నుండి ఫైల్ను తొలగించడం మెర్జ్ కాన్ఫ్లిక్ట్ను నివారిస్తుందా? — లేదు. బ్రాంచ్లు విడిపోయినప్పుడు ఫైల్ ఉనికిలో ఉంటే, అది ఒక వైపు సవరించబడుతున్నప్పుడు మరొక వైపు దాన్ని తొలగించడం ఇప్పటికీ కాన్ఫ్లిక్ట్ను సృష్టిస్తుంది, కాకపోతే అది వేరే రకం.
- ఇమేజ్ కాన్ఫ్లిక్ట్ కోసం డెస్క్టాప్ Git క్లయింట్లో "use my version" లేదా "use theirs" సురక్షితమేనా? — ఇది కాన్ఫ్లిక్ట్ను పరిష్కరిస్తుంది, కానీ కేవలం ఒక ఫైల్ను ఉన్నది ఉన్నట్లుగా ఉంచడం ద్వారా మాత్రమే; WebP కాపీ వంటి డెరైవ్డ్ కౌంటర్పార్ట్ ఆటోమేటిక్గా సరిదిద్దబడదు.
- దీని అర్థం ఏమిటి
git merge -X oursఅసలు ఏం చేస్తుంది? — అడగడానికి ఆగకుండా, మొత్తం మెర్జ్ కోసం ప్రస్తుత బ్రాంచ్ వెర్షన్ను ఉంచడం ద్వారా ప్రతి కాన్ఫ్లిక్ట్ ఫైల్ను స్వయంచాలకంగా పరిష్కరించమని ఇది Gitకి చెబుతుంది. - WebP ఫైల్ను కేవలం మెర్జ్ చేసే బదులు దాన్ని ఎందుకు మళ్లీ జనరేట్ చేయాలి? — ఇది అసలు ఇమేజ్ యొక్క కంప్రెస్డ్ డెరివేటివ్; రెండు వేర్వేరు కంప్రెస్డ్ వెర్షన్లను "merge" చేయడానికి ఎలాంటి అర్థవంతమైన మార్గం లేదు, కాబట్టి సరైన మూలం నుండి దాన్ని మళ్లీ క్రియేట్ చేయడం ఒక్కటే సరైన పరిష్కారం.
- బృందాలు ఈ రకమైన కాన్ఫ్లిక్ట్ను మొదటి స్థానంలో ఎలా నివారిస్తాయి? — బహుళ ప్రదేశాల నుండి లైవ్ బ్రాంచ్కి డైరెక్ట్ ఎడిట్లను అనుమతించే బదులు, అన్ని మార్పులు లైవ్ బ్రాంచ్కు చేరుకోవడానికి ముందు వర్కింగ్ బ్రాంచ్ ద్వారా వెళ్ళే ఒక స్థిరమైన ఫ్లోను ఉంచడం ద్వారా.
ట్యాగ్లు
#git #github #webp #imageoptimization #webdev #devops #versioncontrol #mergeconflict #cicd #webperformance
Linux Server Hardening Checklist
30 practical steps to take a fresh Linux box from default to defensible. Enter your email — you'll get the PDF instantly, plus new posts on Linux, security & AI.
Free. No spam — unsubscribe in one click.


Responses
Sign in to leave a response.