{"id":756,"date":"2026-09-15T20:02:52","date_gmt":"2026-09-15T20:02:52","guid":{"rendered":"https:\/\/www.vps.tc\/blog\/?p=756"},"modified":"2026-09-15T20:02:52","modified_gmt":"2026-09-15T20:02:52","slug":"git-nedir-surum-kontrolu-nasil-calisir","status":"publish","type":"post","link":"https:\/\/www.vps.tc\/blog\/tr\/git-nedir-surum-kontrolu-nasil-calisir\/","title":{"rendered":"Git Nedir? S\u00fcr\u00fcm Kontrol\u00fc Nas\u0131l \u00c7al\u0131\u015f\u0131r?"},"content":{"rendered":"<div class=\"aiw-summary\" id=\"aiw-ozet\">\n<p class=\"aiw-summary-title\">H\u0131zl\u0131 \u00d6zet &#8211; Git ve S\u00fcr\u00fcm Kontrol\u00fc<\/p>\n<p>Git, dosya de\u011fi\u015fikliklerini commit ad\u0131 verilen kay\u0131tlarla izleyen da\u011f\u0131t\u0131k s\u00fcr\u00fcm kontrol sistemidir. Branch, staging alan\u0131 ve remote depo birlikte kullan\u0131ld\u0131\u011f\u0131nda ekip \u00e7al\u0131\u015fmas\u0131 ve g\u00fcvenli geri d\u00f6n\u00fc\u015f kolayla\u015f\u0131r.<\/p>\n<ul>\n<li><strong>Git tan\u0131m\u0131<\/strong> \u2014 Dosyalar\u0131n de\u011fi\u015fim ge\u00e7mi\u015fini yerel depoda tutar ve \u00f6nceki commit&#039;lere d\u00f6nmeyi sa\u011flar.<\/li>\n<li><strong>\u00dc\u00e7 \u00e7al\u0131\u015fma alan\u0131<\/strong> \u2014 Working tree, staging area ve repository de\u011fi\u015fikli\u011fin haz\u0131rlanmas\u0131n\u0131, se\u00e7ilmesini ve kaydedilmesini ay\u0131r\u0131r.<\/li>\n<li><strong>Commit mant\u0131\u011f\u0131<\/strong> \u2014 Commit, belirli bir andaki de\u011fi\u015fiklikleri a\u00e7\u0131klayan ve ge\u00e7mi\u015fe eklenen kal\u0131c\u0131 kay\u0131tt\u0131r.<\/li>\n<li><strong>Branch kullan\u0131m\u0131<\/strong> \u2014 Yeni \u00f6zellikleri veya d\u00fczeltmeleri ana geli\u015ftirme \u00e7izgisinden ba\u011f\u0131ms\u0131z denemeye yarar.<\/li>\n<li><strong>Remote depo<\/strong> \u2014 GitHub ve GitLab gibi platformlar yerel Git depolar\u0131n\u0131 ekip \u00e7al\u0131\u015fmas\u0131 i\u00e7in uzakta bar\u0131nd\u0131r\u0131r.<\/li>\n<li><strong>Yedek fark\u0131<\/strong> \u2014 Git ge\u00e7mi\u015fi kaynak kodunu izler; veritaban\u0131 ve kullan\u0131c\u0131 dosyalar\u0131 i\u00e7in ayr\u0131ca test edilmi\u015f yedek gerekir.<\/li>\n<\/ul>\n<\/div>\n<p class=\"aiw-lead\">Git, dosyalar\u0131n yaln\u0131zca son halini de\u011fil, de\u011fi\u015fiklik ge\u00e7mi\u015fini de tutan da\u011f\u0131t\u0131k s\u00fcr\u00fcm kontrol sistemidir. Git ile dosyalar\u0131 staging alan\u0131na al\u0131r, commit olarak kaydeder, branch&#039;lerde ayr\u0131 \u00e7al\u0131\u015f\u0131r ve uzak depolarla payla\u015fabilirsiniz. B\u00f6ylece hatal\u0131 bir de\u011fi\u015fikli\u011fin ne zaman yap\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcp \u00f6nceki \u00e7al\u0131\u015fan s\u00fcr\u00fcme d\u00f6nebilirsiniz.<\/p>\n<div class=\"aiw-toc\" style=\"border:1px solid #dbe3ea;border-radius:8px;padding:16px 20px;margin:0 0 28px\">\n<p class=\"aiw-toc-head\"><strong>\u0130\u00e7indekiler<\/strong><span class=\"aiw-toc-meta\"> \u00b7 10 dk okuma<\/span><\/p>\n<ol style=\"margin:10px 0 0;padding-left:22px\">\n<li><a href=\"#git-nedir-ve-neyi-cozer\">Git nedir ve neyi \u00e7\u00f6zer?<\/a><\/li>\n<li><a href=\"#surum-kontrolu-nasil-calisir\">S\u00fcr\u00fcm kontrol\u00fc nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/a><\/li>\n<li><a href=\"#git-commit-nedir-branch-ne-ise-yarar\">Git commit nedir, branch ne i\u015fe yarar?<\/a><\/li>\n<li><a href=\"#gunluk-git-kullanimi-icin-temel-komutlar\">G\u00fcnl\u00fck Git kullan\u0131m\u0131 i\u00e7in temel komutlar<\/a><\/li>\n<li><a href=\"#uzak-depo-push-ve-pull-nasil-calisir\">Uzak depo, push ve pull nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/a><\/li>\n<li><a href=\"#git-ile-github-gitlab-ve-yedekleme-ayni-sey-mi\">Git ile GitHub, GitLab ve yedekleme ayn\u0131 \u015fey mi?<\/a><\/li>\n<li><a href=\"#git-conflict-neden-cikar-ve-nasil-cozulur\">Git conflict neden \u00e7\u0131kar ve nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/a><\/li>\n<li><a href=\"#git-kullanirken-sik-yapilan-hatalar\">Git kullan\u0131rken s\u0131k yap\u0131lan hatalar<\/a><\/li>\n<li><a href=\"#ilk-git-deposunu-kullanirken-sunlari-kontrol-edin\">\u0130lk Git Deposunu Kullan\u0131rken \u015eunlar\u0131 Kontrol Edin<\/a><\/li>\n<li><a href=\"#sik-sorulan-sorular\">S\u0131k Sorulan Sorular<\/a><\/li>\n<li><a href=\"#kaynaklar\">Kaynaklar<\/a><\/li>\n<\/ol>\n<\/div>\n<h2 id=\"git-nedir-ve-neyi-cozer\">Git nedir ve neyi \u00e7\u00f6zer?<\/h2>\n<p>Bir dosyada bug\u00fcn \u00e7al\u0131\u015fan kodu yar\u0131n bozdu\u011funuzda, yaln\u0131zca son halini g\u00f6rmek \u00e7o\u011fu zaman yeterli olmaz. Hangi sat\u0131r\u0131n ne zaman de\u011fi\u015fti\u011fini, de\u011fi\u015fikli\u011fi kimin yapt\u0131\u011f\u0131n\u0131 ve \u00f6nceki s\u00fcr\u00fcme nas\u0131l d\u00f6n\u00fclece\u011fini bilmeniz gerekir. Git, dosya ve kod de\u011fi\u015fikliklerini yerel bir depo i\u00e7inde izleyen da\u011f\u0131t\u0131k s\u00fcr\u00fcm kontrol sistemidir.<\/p>\n<p>Git, Linux \u00e7ekirde\u011finin geli\u015ftirme ihtiya\u00e7lar\u0131 i\u00e7in olu\u015fturuldu. Bug\u00fcn web uygulamalar\u0131ndan <strong><a href=\"https:\/\/www.vps.tc\/blog\/tr\/bash-script-nedir-linux-otomasyonu-rehberi\/\">Bash Script Nedir? Linux Otomasyonu Rehberi<\/a><\/strong> kapsam\u0131ndaki otomasyon dosyalar\u0131na, altyap\u0131 tan\u0131mlar\u0131ndan dok\u00fcmantasyona kadar pek \u00e7ok metin tabanl\u0131 dosyay\u0131 y\u00f6netmek i\u00e7in kullan\u0131labilir.<\/p>\n<p>GitHub, GitLab veya Bitbucket Git&#8217;in kendisi de\u011fildir. Bu platformlar Git depolar\u0131n\u0131 uzakta bar\u0131nd\u0131r\u0131r; inceleme, eri\u015fim yetkisi, issue ve CI\/CD gibi ekip \u00f6zellikleri sunar.<\/p>\n<h3>Git hangi bilgileri saklar?<\/h3>\n<ul>\n<li>Dosyalar\u0131n belirli andaki i\u00e7eri\u011fini<\/li>\n<li>De\u011fi\u015fikli\u011fi yapan kullan\u0131c\u0131y\u0131 ve zaman\u0131<\/li>\n<li>Commit mesaj\u0131n\u0131 ve ebeveyn commit ili\u015fkisini<\/li>\n<li>Branch ve etiket gibi referanslar\u0131<\/li>\n<li>Dosya i\u00e7eri\u011finin b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc do\u011frulayan kimlikleri<\/li>\n<\/ul>\n<p>Git yaln\u0131zca dosyan\u0131n \u00f6nceki halini saklayan basit bir yedekleme klas\u00f6r\u00fc de\u011fildir. Commit&#8217;ler birbirine ba\u011flanan nesnelerdir; branch ise bu commit&#8217;lerden birini g\u00f6steren hareketli bir referanst\u0131r.<\/p>\n<p><strong>Git deposu olu\u015fturun<\/strong> &#8211; Proje klas\u00f6r\u00fcnde \u00f6nce <code>git init<\/code> \u00e7al\u0131\u015ft\u0131r\u0131n ve ilk commit&#8217;i anlaml\u0131 bir mesajla kaydedin.<\/p>\n<h2 id=\"surum-kontrolu-nasil-calisir\">S\u00fcr\u00fcm kontrol\u00fc nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/h2>\n<p>Git&#8217;in \u00e7al\u0131\u015fma mant\u0131\u011f\u0131n\u0131 anlaman\u0131n pratik yolu, dosyalar\u0131n\u0131z\u0131n ge\u00e7ti\u011fi \u00fc\u00e7 alan\u0131 ay\u0131rmakt\u0131r: \u00e7al\u0131\u015fma dizini, staging area ve Git deposu. Bu ayr\u0131m, dosyada yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklik ile commit&#8217;e dahil etmek istedi\u011finiz de\u011fi\u015fikli\u011fi birbirinden ay\u0131r\u0131r.<\/p>\n<table>\n<thead>\n<tr>\n<th>Alan<\/th>\n<th>G\u00f6revi<\/th>\n<th>\u0130lgili komut<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Working tree<\/td>\n<td>Diskte d\u00fczenledi\u011finiz mevcut dosyalar<\/td>\n<td><code>git status<\/code><\/td>\n<\/tr>\n<tr>\n<td>Staging area<\/td>\n<td>Bir sonraki commit&#8217;e se\u00e7ilen de\u011fi\u015fiklikler<\/td>\n<td><code>git add<\/code><\/td>\n<\/tr>\n<tr>\n<td>Repository<\/td>\n<td>Kal\u0131c\u0131 commit ge\u00e7mi\u015fi ve Git nesneleri<\/td>\n<td><code>git commit<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0130ki dosyay\u0131 de\u011fi\u015ftirdi\u011finizi d\u00fc\u015f\u00fcn\u00fcn. Yaln\u0131zca birini <code>git add<\/code> ile staging alan\u0131na al\u0131rsan\u0131z sonraki commit di\u011fer dosyadaki de\u011fi\u015fikli\u011fi i\u00e7ermez. Bu davran\u0131\u015f, tek bir commit&#8217;in tek bir mant\u0131ksal de\u011fi\u015fikli\u011fi anlatmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<pre><code>git status\ngit add nginx.conf\ngit diff --cached\ngit commit -m \"Nginx proxy ayar\u0131n\u0131 g\u00fcncelle\"<\/code><\/pre>\n<p><code>git diff --cached<\/code> staging alan\u0131na al\u0131nan de\u011fi\u015fikli\u011fi g\u00f6sterir. Commit&#8217;ten hemen \u00f6nce bu \u00e7\u0131kt\u0131y\u0131 okumak, yanl\u0131\u015f dosyan\u0131n veya parolan\u0131n kayda girmesini engeller.<\/p>\n<p><strong>Commit&#8217;i inceleyin<\/strong> &#8211; <code>git commit<\/code> \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce <code>git diff --cached<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 okuyun.<\/p>\n<h2 id=\"git-commit-nedir-branch-ne-ise-yarar\">Git commit nedir, branch ne i\u015fe yarar?<\/h2>\n<p>Commit, projenin belirli bir andaki kayd\u0131d\u0131r. \u0130yi bir commit mesaj\u0131 yaln\u0131zca de\u011fi\u015fiklik yap\u0131ld\u0131\u011f\u0131n\u0131 s\u00f6ylemez; yap\u0131lan i\u015fi k\u0131sa ve arand\u0131\u011f\u0131nda anla\u015f\u0131l\u0131r bi\u00e7imde belirtir. <code>fix: SMTP timeout de\u011ferini 30 saniyeye \u00e7\u0131kar<\/code> mesaj\u0131, <code>g\u00fcncelleme<\/code> mesaj\u0131ndan daha fazla ba\u011flam ta\u015f\u0131r.<\/p>\n<p>Branch, ana geli\u015ftirme \u00e7izgisinden ayr\u0131lan bir \u00e7al\u0131\u015fma hatt\u0131d\u0131r. Yeni bir \u00f6zellik veya riskli bir yap\u0131land\u0131rma branch \u00fczerinde denenebilir; ana branch do\u011frudan etkilenmez.<\/p>\n<pre><code>git switch -c feature\/healthcheck\ngit add .\ngit commit -m \"Add HTTP healthcheck\"\ngit switch main\ngit merge --no-ff feature\/healthcheck<\/code><\/pre>\n<p>Buradaki <code>git switch -c<\/code> yeni branch olu\u015fturup ona ge\u00e7er. Eski Git s\u00fcr\u00fcmlerinde ayn\u0131 i\u015f i\u00e7in <code>git checkout -b<\/code> komutu da kullan\u0131labilir. <code>--no-ff<\/code>, branch ge\u00e7mi\u015finin birle\u015fme noktas\u0131n\u0131 g\u00f6r\u00fcn\u00fcr tutar; ekip politikas\u0131 farkl\u0131ysa fast-forward merge tercih edilebilir.<\/p>\n<h3>Merge ile rebase fark\u0131<\/h3>\n<p><code>merge<\/code> iki ge\u00e7mi\u015fi birle\u015ftirir ve gerekti\u011finde merge commit olu\u015fturur. <code>rebase<\/code> ise branch commit&#8217;lerini ba\u015fka bir taban\u0131n \u00fczerine yeniden yazar. Bu nedenle rebase, hen\u00fcz payla\u015f\u0131lmam\u0131\u015f yerel commit&#8217;lerde kullan\u0131\u015fl\u0131d\u0131r; ortak branch \u00fczerinde yap\u0131lmas\u0131 ba\u015fkalar\u0131n\u0131n referanslar\u0131n\u0131 bozabilir.<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0130\u015flem<\/th>\n<th>Ge\u00e7mi\u015fe etkisi<\/th>\n<th>Ne zaman tercih edilir?<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Merge<\/td>\n<td>Mevcut commit kimliklerini korur<\/td>\n<td>Payla\u015f\u0131lm\u0131\u015f branch&#8217;leri birle\u015ftirirken<\/td>\n<\/tr>\n<tr>\n<td>Rebase<\/td>\n<td>Commit&#8217;leri yeni ebeveynle yeniden olu\u015fturur<\/td>\n<td>Yerel branch&#8217;i g\u00fcncel tabana ta\u015f\u0131rken<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Branch&#8217;i payla\u015fmadan yeniden yazmay\u0131n<\/strong> &#8211; Ortak branch \u00fczerinde <code>git push --force<\/code> kullanmadan \u00f6nce ekipten a\u00e7\u0131k onay al\u0131n.<\/p>\n<div class=\"aiw-callout aiw-callout-tip\">\n<p class=\"aiw-callout-label\">\u0130pucu<\/p>\n<p>Yeni bir projede ilk g\u00fcnden anlaml\u0131 commit mesajlar\u0131 kullan\u0131n. Her commit tek bir mant\u0131ksal de\u011fi\u015fikli\u011fi anlats\u0131n; b\u00f6ylece git log ve git bisect \u00e7\u0131kt\u0131lar\u0131 ger\u00e7ekten i\u015fe yarar.<\/p>\n<\/div>\n<h2 id=\"gunluk-git-kullanimi-icin-temel-komutlar\">G\u00fcnl\u00fck Git kullan\u0131m\u0131 i\u00e7in temel komutlar<\/h2>\n<p>Git komutlar\u0131n\u0131 ezber listesi gibi de\u011fil, de\u011fi\u015fikli\u011fin ya\u015fam d\u00f6ng\u00fcs\u00fc olarak d\u00fc\u015f\u00fcnmek daha pratiktir. \u00d6nce mevcut durumu g\u00f6r\u00fcn, dosyalar\u0131 se\u00e7in, fark\u0131 kontrol edin ve commit olu\u015fturun.<\/p>\n<pre><code>git clone ssh:\/\/git@example.com\/uygulama.git\ncd uygulama\ngit status\ngit switch -c fix\/login-timeout\nvim config\/app.conf\ngit diff\ngit add config\/app.conf\ngit diff --cached\ngit commit -m \"Fix login timeout configuration\"\ngit log --oneline --decorate -5<\/code><\/pre>\n<p><code>git clone<\/code> uzak depoyu ve ge\u00e7mi\u015fini yerel makineye indirir. <code>git diff<\/code> staging alan\u0131na al\u0131nmayan de\u011fi\u015fiklikleri, <code>git log --oneline<\/code> ise k\u0131sa commit ge\u00e7mi\u015fini g\u00f6sterir.<\/p>\n<h3>Dosya ekleme ve geri alma<\/h3>\n<p><code>git add -p<\/code>, dosyan\u0131n tamam\u0131 yerine de\u011fi\u015fiklik par\u00e7alar\u0131n\u0131 se\u00e7menizi sa\u011flar. Ayn\u0131 dosyada iki ayr\u0131 i\u015f yapt\u0131ysan\u0131z bu se\u00e7enek, commit&#8217;leri mant\u0131ksal olarak ay\u0131r\u0131r.<\/p>\n<pre><code>git add -p\ngit restore --staged config\/app.conf\ngit restore config\/app.conf<\/code><\/pre>\n<p><code>git restore --staged<\/code> dosyay\u0131 staging alan\u0131ndan \u00e7\u0131kar\u0131r; \u00e7al\u0131\u015fma dizinindeki de\u011fi\u015fikli\u011fi silmez. \u0130kinci komut ise kaydedilmemi\u015f \u00e7al\u0131\u015fma dizini de\u011fi\u015fikliklerini geri al\u0131r. Bu komut dikkat ister &#8211; yanl\u0131\u015f dosyada kullan\u0131ld\u0131\u011f\u0131nda yerel de\u011fi\u015fiklik kurtar\u0131lamayabilir.<\/p>\n<p><strong>Silmeden \u00f6nce kontrol edin<\/strong> &#8211; Geri alma komutlar\u0131ndan \u00f6nce <code>git status<\/code> ve <code>git diff<\/code> \u00e7\u0131kt\u0131lar\u0131nda do\u011fru dosyay\u0131 do\u011frulay\u0131n.<\/p>\n<div class=\"aiw-callout aiw-callout-warn\">\n<p class=\"aiw-callout-label\">Dikkat<\/p>\n<p>git add . komutu \u00e7al\u0131\u015fma dizinindeki beklenmeyen dosyalar\u0131 da staging alan\u0131na alabilir. Commit \u00f6ncesinde git status ve git diff &#8211;cached \u00e7\u0131kt\u0131s\u0131n\u0131 okumadan ilerlemeyin.<\/p>\n<\/div>\n<h2 id=\"uzak-depo-push-ve-pull-nasil-calisir\">Uzak depo, push ve pull nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/h2>\n<p>Yerel Git deposu tek ba\u015f\u0131na \u00e7al\u0131\u015fabilir. Ekip \u00e7al\u0131\u015fmas\u0131nda ise bir uzak depo tan\u0131mlan\u0131r; \u00e7o\u011fu kurulumda bu uzak depo <code>origin<\/code> ad\u0131yla kaydedilir. <code>git fetch<\/code> uzaktaki referans ve commit bilgilerini indirir, fakat \u00e7al\u0131\u015fma dizininizi de\u011fi\u015ftirmez. <code>git pull<\/code> ise genel olarak fetch i\u015fleminden sonra merge veya rebase uygular.<\/p>\n<pre><code>git remote -v\ngit fetch origin\ngit log --oneline HEAD..origin\/main\ngit switch main\ngit pull --ff-only origin main\ngit push -u origin feature\/healthcheck<\/code><\/pre>\n<p><code>git pull --ff-only<\/code>, yerel ve uzak ge\u00e7mi\u015f ayr\u0131\u015fm\u0131\u015fsa otomatik merge yapmaz; hata vererek karar vermenizi ister. \u00dcretim sunucusunda sessiz bir merge yerine bu davran\u0131\u015f daha \u00f6ng\u00f6r\u00fclebilirdir.<\/p>\n<p>SSH ile ba\u011flant\u0131 kullan\u0131rken uzak URL <code>git@example.com:team\/app.git<\/code> bi\u00e7iminde olabilir. HTTPS kullan\u0131l\u0131yorsa parola yerine sa\u011flay\u0131c\u0131n\u0131n \u00f6nerdi\u011fi eri\u015fim belirteci gerekir. \u00d6zel anahtarlar, API belirte\u00e7leri ve <code>.env<\/code> dosyalar\u0131 depoya eklenmemelidir.<\/p>\n<h3>.gitignore ne yapar?<\/h3>\n<p><code>.gitignore<\/code>, Git&#8217;in izlemeye almad\u0131\u011f\u0131 dosya desenlerini tan\u0131mlar. PHP ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7in <code>vendor\/<\/code>, Node.js projeleri i\u00e7in <code>node_modules\/<\/code> ve yerel s\u0131rlar i\u00e7in <code>.env<\/code> eklenebilir. Daha \u00f6nce commit edilmi\u015f bir dosyay\u0131 yaln\u0131zca <code>.gitignore<\/code>&#8216;a yazmak depodan kald\u0131rmaz; izlemeyi b\u0131rakmak i\u00e7in ayr\u0131ca <code>git rm --cached<\/code> gerekir.<\/p>\n<p><strong>Uzak ge\u00e7mi\u015fi \u00f6nce g\u00fcncelleyin<\/strong> &#8211; Push \u00f6ncesinde <code>git fetch<\/code> \u00e7al\u0131\u015ft\u0131r\u0131n, fark\u0131 inceleyin ve birle\u015ftirmeyi kontroll\u00fc yap\u0131n.<\/p>\n<div class=\"aiw-callout aiw-callout-example\">\n<p class=\"aiw-callout-label\">\u00d6rnek<\/p>\n<p>Bir uygulaman\u0131n timeout ayar\u0131n\u0131 de\u011fi\u015ftiren ekip, \u00f6nce feature\/timeout branch&#039;i a\u00e7abilir. De\u011fi\u015fiklik test edildikten sonra merge edilir; canl\u0131 sunucuda do\u011frudan dosya d\u00fczenlemek yerine hangi commit&#039;in da\u011f\u0131t\u0131ld\u0131\u011f\u0131 a\u00e7\u0131k\u00e7a g\u00f6r\u00fclebilir.<\/p>\n<\/div>\n<h2 id=\"git-ile-github-gitlab-ve-yedekleme-ayni-sey-mi\">Git ile GitHub, GitLab ve yedekleme ayn\u0131 \u015fey mi?<\/h2>\n<p>Git da\u011f\u0131t\u0131k bir s\u00fcr\u00fcm kontrol sistemidir; GitHub ve GitLab bar\u0131nd\u0131rma ve ekip i\u015f ak\u0131\u015f\u0131 hizmetleridir. Yerel deponuzdaki commit ge\u00e7mi\u015fi, uzak platform eri\u015filemez oldu\u011funda da kullan\u0131labilir. Bu, Git deposunun otomatik olarak iyi bir yedek oldu\u011fu anlam\u0131na gelmez.<\/p>\n<p>Bir Git deposu kaynak kodunun ge\u00e7mi\u015fini korur; veritaban\u0131 i\u00e7eri\u011fi, y\u00fcklenen g\u00f6rseller, kullan\u0131c\u0131 dosyalar\u0131 ve \u00fcretim s\u0131rlar\u0131 \u00e7o\u011fu uygulamada ayr\u0131 yedekleme gerektirir. \u00d6rne\u011fin <strong><a href=\"https:\/\/www.vps.tc\/blog\/tr\/vps-mysql-kurulumu-guvenli-yapilandirma\/\">VPS&#8217;te MySQL Kurulumu ve G\u00fcvenli Yap\u0131land\u0131rma<\/a><\/strong> s\u0131ras\u0131nda kullan\u0131lan \u015fema migration dosyalar\u0131 Git&#8217;te tutulabilir, fakat canl\u0131 MySQL veritaban\u0131 ayr\u0131ca yedeklenmelidir.<\/p>\n<p>Git ge\u00e7mi\u015finden silinen bir parola g\u00fcvenli kabul edilmemelidir. Commit ge\u00e7mi\u015finde g\u00f6r\u00fcnm\u00fc\u015f bir anahtar i\u00e7in anahtar\u0131 iptal etmek veya d\u00f6nd\u00fcrmek, yaln\u0131zca dosyay\u0131 sonraki commit&#8217;te silmekten daha do\u011fru m\u00fcdahaledir.<\/p>\n<p>Altyap\u0131 kodu da Git ile izlenebilir. <strong><a href=\"https:\/\/www.vps.tc\/blog\/tr\/cloud-init-nedir-vps-kurulumunu-otomatiklestirme\/\">Cloud-Init Nedir? VPS Kurulumunu Otomatikle\u015ftirme<\/a><\/strong> gibi kurulum tan\u0131mlar\u0131 ve <strong><a href=\"https:\/\/www.vps.tc\/blog\/tr\/vps-docker-kurulumu-ilk-konteyner\/\">VPS&#8217;te Docker Kurulumu ve \u0130lk Konteyneri \u00c7al\u0131\u015ft\u0131rma<\/a><\/strong> kapsam\u0131ndaki Compose dosyalar\u0131 branch, inceleme ve geri d\u00f6n\u00fc\u015f avantajlar\u0131ndan yararlan\u0131r.<\/p>\n<table>\n<thead>\n<tr>\n<th>Ara\u00e7<\/th>\n<th>Temel i\u015flev<\/th>\n<th>Git&#8217;e ba\u011f\u0131ml\u0131 m\u0131?<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Git<\/td>\n<td>De\u011fi\u015fiklik ve commit ge\u00e7mi\u015fi<\/td>\n<td>Hay\u0131r<\/td>\n<\/tr>\n<tr>\n<td>GitHub\/GitLab<\/td>\n<td>Uzak depo, inceleme ve otomasyon<\/td>\n<td>Git depolar\u0131n\u0131 kullan\u0131r<\/td>\n<\/tr>\n<tr>\n<td>BorgBackup\/rsync<\/td>\n<td>Dosya ve sistem yedekleme<\/td>\n<td>Hay\u0131r<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Yede\u011fi ayr\u0131 tutun<\/strong> &#8211; Git deposunu d\u00fczenli olarak uzak konuma g\u00f6nderin, \u00fcretim verilerini ise ba\u011f\u0131ms\u0131z ve geri d\u00f6n\u00fc\u015f\u00fc test edilmi\u015f bir yedekleme sistemiyle koruyun.<\/p>\n<h2 id=\"git-conflict-neden-cikar-ve-nasil-cozulur\">Git conflict neden \u00e7\u0131kar ve nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/h2>\n<p>Conflict, Git&#8217;in iki de\u011fi\u015fikli\u011fi otomatik olarak birle\u015ftiremedi\u011fi durumda olu\u015fur. Ayn\u0131 dosyan\u0131n ayn\u0131 sat\u0131rlar\u0131 farkl\u0131 branch&#8217;lerde de\u011fi\u015ftirilmi\u015fse Git karar vermez; se\u00e7imi kullan\u0131c\u0131ya b\u0131rak\u0131r.<\/p>\n<pre><code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD\nproxy_read_timeout 30s;\n=======\nproxy_read_timeout 60s;\n&gt;&gt;&gt;&gt;&gt;&gt;&gt; feature\/timeout<\/code><\/pre>\n<p>\u0130\u015faretler dosyada kalmamal\u0131d\u0131r. Do\u011fru sat\u0131r\u0131 se\u00e7in, i\u015faretleri silin, dosyay\u0131 test edin ve \u00e7\u00f6z\u00fcm\u00fc staging alan\u0131na al\u0131n.<\/p>\n<pre><code>git status\nvim nginx.conf\nnginx -t\ngit add nginx.conf\ngit commit -m \"Resolve Nginx timeout conflict\"<\/code><\/pre>\n<p>\u00c7at\u0131\u015fma birden fazla dosyadaysa <code>git status<\/code> hangi dosyalar\u0131n bekledi\u011fini g\u00f6sterir. Merge karar\u0131ndan emin de\u011filseniz <code>git merge --abort<\/code> ile merge \u00f6ncesi duruma d\u00f6nebilirsiniz; rebase i\u00e7in kar\u015f\u0131l\u0131\u011f\u0131 <code>git rebase --abort<\/code> komutudur.<\/p>\n<p>\u00c7ak\u0131\u015fmay\u0131 \u00e7\u00f6zerken yaln\u0131zca dosyan\u0131n s\u00f6zdizimini de\u011fil, davran\u0131\u015f\u0131n\u0131 da kontrol edin. Nginx i\u00e7in <code>nginx -t<\/code>, uygulama i\u00e7in test komutu ve Docker yap\u0131land\u0131rmas\u0131 i\u00e7in ilgili do\u011frulama ad\u0131m\u0131 \u00e7al\u0131\u015ft\u0131r\u0131lmal\u0131d\u0131r.<\/p>\n<h2 id=\"git-kullanirken-sik-yapilan-hatalar\">Git kullan\u0131rken s\u0131k yap\u0131lan hatalar<\/h2>\n<p><strong>Her \u015feyi <code>git add .<\/code> ile eklemek:<\/strong> \u00c7al\u0131\u015fma dizinindeki gizli veya ge\u00e7ici dosyalar istemeden commit&#8217;e girebilir. \u00d6nce <code>git status<\/code> ile listeyi inceleyin; gerekiyorsa dosya ad\u0131 belirterek staging yap\u0131n.<\/p>\n<p><strong>Commit ge\u00e7mi\u015fini parola kasas\u0131 sanmak:<\/strong> Bir s\u0131rr\u0131 dosyadan silmek, eski commit&#8217;lerdeki kopyas\u0131n\u0131 yok etmez. Anahtar\u0131 iptal edin; ge\u00e7mi\u015f temizli\u011fi gerekiyorsa i\u015flemi ekip\u00e7e planlay\u0131n.<\/p>\n<p><strong>Force push kullanmak:<\/strong> <code>git push --force-with-lease<\/code>, d\u00fcz <code>--force<\/code> se\u00e7ene\u011finden daha g\u00fcvenlidir; yine de ortak branch&#8217;lerde geli\u015fig\u00fczel kullan\u0131lmamal\u0131d\u0131r.<\/p>\n<p><strong>Test etmeden merge etmek:<\/strong> Commit ge\u00e7mi\u015fi temiz g\u00f6r\u00fcnse bile uygulama \u00e7al\u0131\u015fmayabilir. CI kontrolleri, yap\u0131land\u0131rma testleri ve m\u00fcmk\u00fcnse staging ortam\u0131 kullan\u0131lmal\u0131d\u0131r.<\/p>\n<p><strong>Git&#8217;i yedekleme yerine koymak:<\/strong> Uzak depo hesab\u0131 silinirse veya eri\u015fim yetkisi kaybolursa tek kopya korunmu\u015f say\u0131lmaz. Farkl\u0131 eri\u015fim alan\u0131nda, d\u00fczenli do\u011frulanan bir yedek bulundurun.<\/p>\n<p>Git&#8217;in g\u00fcc\u00fc komut say\u0131s\u0131nda de\u011fil, de\u011fi\u015fiklikleri k\u00fc\u00e7\u00fck ve izlenebilir par\u00e7alara ay\u0131rmas\u0131ndad\u0131r. Her commit geri d\u00f6n\u00fc\u015f\u00fc kolayla\u015ft\u0131r\u0131r; belirsiz commit&#8217;ler ise gelecekteki incelemeyi uzat\u0131r.<\/p>\n<div class=\"aiw-callout aiw-callout-field\">\n<p class=\"aiw-callout-label\">Sahadan not<\/p>\n<p>Bir sunucuda eski dosyalar\u0131 temizlemek i\u00e7in git clean -fdx komutunu yazm\u0131\u015ft\u0131m. K\u0131rm\u0131z\u0131 prompt&#039;taki hostname&#039;in production makinesini g\u00f6sterdi\u011fini fark edince Enter&#039;a basmadan durdum; ard\u0131ndan git status ve hostname \u00e7\u0131kt\u0131lar\u0131yla hedefi yeniden do\u011frulad\u0131m.<\/p>\n<\/div>\n<h2 id=\"ilk-git-deposunu-kullanirken-sunlari-kontrol-edin\">\u0130lk Git Deposunu Kullan\u0131rken \u015eunlar\u0131 Kontrol Edin<\/h2>\n<ul class=\"aiw-checklist\">\n<li>Depoyu do\u011fru klas\u00f6rde ba\u015flat\u0131n veya do\u011fru uzak URL&#039;yi klonlay\u0131n.<\/li>\n<li>\u0130lk commit&#039;ten \u00f6nce .gitignore dosyas\u0131n\u0131 olu\u015fturun.<\/li>\n<li>git status ile beklenmeyen dosyalar\u0131 kontrol edin.<\/li>\n<li>Commit&#039;leri tek bir mant\u0131ksal de\u011fi\u015fiklikle s\u0131n\u0131rlay\u0131n.<\/li>\n<li>Payla\u015fmadan \u00f6nce git diff &#8211;cached \u00e7\u0131kt\u0131s\u0131n\u0131 okuyun.<\/li>\n<li>Uzak branch&#039;i fetch ile g\u00fcncelleyin ve ge\u00e7mi\u015f fark\u0131n\u0131 inceleyin.<\/li>\n<li>Git deposundan ba\u011f\u0131ms\u0131z, geri d\u00f6n\u00fc\u015f\u00fc test edilmi\u015f yedek al\u0131n.<\/li>\n<\/ul>\n<div class=\"aiw-cta\">\n<p>K\u00fc\u00e7\u00fck bir test klas\u00f6r\u00fcnde branch, commit ve merge ak\u0131\u015f\u0131n\u0131 deneyin; komutlar\u0131 canl\u0131 sunucuda \u00f6\u011frenmeye \u00e7al\u0131\u015fmay\u0131n. \u0130lk hedef \u00e7ok say\u0131da komut ezberlemek de\u011fil, her de\u011fi\u015fikli\u011fin izini s\u00fcr\u00fclebilir hale getirmek olsun.<\/p>\n<p class=\"aiw-cta-action\"><a href=\"https:\/\/www.vps.tc\/tr\/vps\">VPS paketlerini inceleyin<\/a><\/p>\n<\/div>\n<h2 id=\"sik-sorulan-sorular\">S\u0131k Sorulan Sorular<\/h2>\n<div class=\"aiw-faq\">\n<details class=\"aiw-faq-item\" open>\n<summary>Git nedir, ne i\u00e7in kullan\u0131l\u0131r?<\/summary>\n<p>Git, dosya de\u011fi\u015fikliklerini commit ad\u0131 verilen kay\u0131tlarla izleyen da\u011f\u0131t\u0131k s\u00fcr\u00fcm kontrol sistemidir. Kodun veya yap\u0131land\u0131rma dosyas\u0131n\u0131n hangi tarihte, kim taraf\u0131ndan ve nas\u0131l de\u011fi\u015fti\u011fini g\u00f6rmenizi sa\u011flar. Branch kullanarak ayr\u0131 geli\u015ftirme hatlar\u0131 olu\u015fturabilir, hatal\u0131 bir de\u011fi\u015fiklikten \u00f6nceki commit&#039;e d\u00f6nebilir ve uzak depolar \u00fczerinden ekip arkada\u015flar\u0131n\u0131zla \u00e7al\u0131\u015fabilirsiniz.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Git ile GitHub aras\u0131ndaki fark nedir?<\/summary>\n<p>Git, bilgisayar\u0131n\u0131zda \u00e7al\u0131\u015fan s\u00fcr\u00fcm kontrol yaz\u0131l\u0131m\u0131d\u0131r. GitHub ise Git depolar\u0131n\u0131 uzakta bar\u0131nd\u0131ran ve pull request, issue, eri\u015fim yetkisi gibi ekip \u00f6zellikleri sunan bir platformdur. Git&#039;i GitHub olmadan yerel bir klas\u00f6rde kullanabilirsiniz; GitHub&#039;\u0131 kullan\u0131rken arka planda Git deposu ve Git komutlar\u0131yla \u00e7al\u0131\u015f\u0131rs\u0131n\u0131z.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Git commit ne demektir?<\/summary>\n<p>Commit, staging alan\u0131na se\u00e7ilmi\u015f de\u011fi\u015fikliklerin a\u00e7\u0131klamal\u0131 ve kal\u0131c\u0131 bir kay\u0131t olarak depoya eklenmesidir. Bir commit dosyalar\u0131n o andaki durumunu, ebeveyn commit bilgisini, yazar\u0131 ve mesaj\u0131 i\u00e7erir. \u0130yi bir commit tek bir mant\u0131ksal i\u015fi anlat\u0131r; \u00f6rne\u011fin yaln\u0131zca oturum zaman a\u015f\u0131m\u0131 ayar\u0131n\u0131 de\u011fi\u015ftirmek gibi.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Git branch ne i\u015fe yarar?<\/summary>\n<p>Branch, commit ge\u00e7mi\u015fi i\u00e7inde ayr\u0131 bir \u00e7al\u0131\u015fma \u00e7izgisidir. Yeni \u00f6zellik, hata d\u00fczeltmesi veya riskli yap\u0131land\u0131rma de\u011fi\u015fikli\u011fi ana branch&#039;i do\u011frudan de\u011fi\u015ftirmeden branch \u00fczerinde haz\u0131rlanabilir. Test tamamlan\u0131nca merge veya pull request ile birle\u015ftirilir. Payla\u015f\u0131lm\u0131\u015f branch ge\u00e7mi\u015fini force push ile yeniden yazmadan \u00f6nce ekip onay\u0131 al\u0131nmal\u0131d\u0131r.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Git merge conflict nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/summary>\n<p>\u00d6nce git status ile \u00e7ak\u0131\u015fan dosyalar\u0131 bulun. Dosyadaki HEAD ve di\u011fer branch i\u015faretleri aras\u0131ndan do\u011fru i\u00e7eri\u011fi se\u00e7ip i\u015faretleri silin, ard\u0131ndan uygulaman\u0131n veya yap\u0131land\u0131rman\u0131n testini \u00e7al\u0131\u015ft\u0131r\u0131n. Dosyay\u0131 git add ile staging alan\u0131na ald\u0131ktan sonra merge commit&#039;ini tamamlay\u0131n. Emin de\u011filseniz git merge &#8211;abort ile i\u015flemi iptal edebilirsiniz.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Git bir yedekleme sistemi midir?<\/summary>\n<p>Git, \u00f6zellikle kaynak kodu ve yap\u0131land\u0131rma dosyalar\u0131n\u0131n de\u011fi\u015fim ge\u00e7mi\u015fini korur; tam sistem yedeklemesinin yerini tutmaz. Veritabanlar\u0131, y\u00fcklenen dosyalar, sertifikalar ve s\u0131rlar i\u00e7in ayr\u0131 yedekleme gerekir. Uzak Git deposu da tek ba\u015f\u0131na yeterli de\u011fildir; eri\u015fim kayb\u0131na kar\u015f\u0131 farkl\u0131 bir konumda kopya ve d\u00fczenli geri d\u00f6n\u00fc\u015f testi bulundurun.<\/p>\n<\/details>\n<\/div>\n<h2 id=\"kaynaklar\">Kaynaklar<\/h2>\n<ul class=\"aiw-sources\">\n<li><a href=\"https:\/\/git-scm.com\/doc\" target=\"_blank\" rel=\"noopener\">Git Resmi Dok\u00fcmantasyonu<\/a> \u2014 git-scm.com<\/li>\n<li><a href=\"https:\/\/git-scm.com\/book\/en\/v2\" target=\"_blank\" rel=\"noopener\">Pro Git Kitab\u0131<\/a> \u2014 git-scm.com<\/li>\n<li><a href=\"https:\/\/git-scm.com\/docs\/gitrevisions\" target=\"_blank\" rel=\"noopener\">Git Revision Selection<\/a> \u2014 git-scm.com<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Git nedir sorusunun yan\u0131t\u0131n\u0131; commit, branch, staging alan\u0131, uzak depo ve conflict \u00e7\u00f6z\u00fcm\u00fc \u00fczerinden ger\u00e7ek komutlarla a\u00e7\u0131kl\u0131yoruz.<\/p>\n","protected":false},"author":2,"featured_media":754,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[873],"tags":[],"class_list":["post-756","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"lang":"tr","translations":{"tr":756,"en":757},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/756","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/comments?post=756"}],"version-history":[{"count":1,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/756\/revisions"}],"predecessor-version":[{"id":758,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/756\/revisions\/758"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/media\/754"}],"wp:attachment":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/media?parent=756"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/categories?post=756"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/tags?post=756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}