Как удалить локальный репозиторий git windows

Как работать с репозиториями Git - пошаговая инструкция. Клонируем, создаем и удаляем репозитории. Основные команды для работы с Git. Следующие инструкции предназначены для тех, кто уже установил Git на свой сервер.

Одна из самых распространенных систем управления версиями – Git. Ее ядро добавляет в систему ряд консольных команд, предназначенных для управления репозиториями. В самих же репозиториях хранятся важные каталоги, конфигурационные файлы, журналы и прочие связанные элементы.

Далее я расскажу, как создать, клонировать и удалить эти репозитории.

Следующие инструкции предназначены для тех, кто уже установил Git на свой сервер. Если вы еще не сделали этого, используйте руководство с GitHub, которое поможет разобраться с выполнением поставленной задачи.

Подробнее: How to install Git

Создание Git-репозитория

Сначала рассмотрим создание репозитория. Представим, что у вас уже есть папка для хранения файлов, но она еще не находится под контролем Git. 

Откройте «Командную строку‎» (Windows) или Терминал (Linux/macOS) и перейдите по пути данной папки.

Команда для перехода по пути установки Git-репозитория

В Linux выполните команду:

cd /home/user/directory

В macOS:

cd /Users/user/directory

В Windows:

cd C:/Users/user/directory

Остается только ввести нижеуказанную команду, чтобы завершить первый этап.

Команда для установки локального Git-репозитория

Благодаря этой команде создается структура подкаталога со всеми необходимыми файлами. Кстати, все они расположены в подпапке с названием .git. Пока что проект не находится под контролем учета версий, поскольку в него добавлены только нужные элементы для работы Git. Для добавления файлов в репозиторий будем использовать git add. Команда git commit является заключительной:

git add

git commit -m 'initial project version'

Теперь у вас есть Git-репозиторий со всеми необходимыми составляющими и отслеживаемыми файлами.

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Клонирование существующего репозитория

Второй вариант создания директории для контроля версий – копирование существующего проекта с другого сервера. Это актуально, когда осуществляется доработка готового проекта или вы желаете внедрить его компоненты в свой. В этом поможет команда git clone, о которой и пойдет речь далее. 

При использовании упомянутой команды вы получаете клоны всех версий файлов, а значит, можете использовать любые из них, если что-то пойдет не так. Это же пригождается, когда требуется вернуть предыдущую версию проекта, что осуществимо благодаря файлам, помещенным под версионный контроль.

Для клонирования существующего репозитория понадобится ввести git clone <url>. Пример такой команды вы видите ниже:

git clone https://github.com/rep/rep

Данная команда позволила вам получить клон всех версий указанного репозитория (в качестве примера было взято название rep). Теперь на вашем сервере создана директория с указанным названием. К ней подключена поддержка контроля версий, то есть появилась папка .git

При использовании вышеуказанной команды репозиторий клонируется с текущим названием. Если же оно должно отличаться, используйте следующую вариацию команды:

git clone https://github.com/rep/rep myrep

Завершим этот раздел статьи описанием содержимого, которое появляется в консоли при выполнении команды. Данный вывод соответствует успешному клонированию:

Cloning into 'Git'...

remote: Counting objects: 46, done.

remote: Compressing objects: 100% (25/25), done.

remote: Total 46 (delta 7), reused 43 (delta 4), pack-reused 0

Unpacking objects: 100% (46/46), done.

Checking connectivity... done.

Удаление локального Git-репозитория

Если с созданием и клонированием репозиториев все понятно, то как быть, когда папка с проектом уже существует, но в нее нужно поместить новые данные, удалив предыдущие, или когда Git-репозиторий на сервере больше не нужен. В таком случае осуществляется стандартное удаление.

В корне каталога с проектом необходимо избавиться от папки .git, о которой уже шла речь выше. Так вы удаляете только ту информацию, которая связана с Git, но сам проект остается. В Linux через Терминал вы должны перейти к каталогу с проектом и ввести следующую команду:

Еще один вариант – удаление .gitignore и .gitmodules в случае их наличия. Тогда команда меняет свой вид на:

Остается только убедиться в отсутствии скрытой папки, которая может помешать инсталляции новой. Для этого существует простая команда ls -lah, выполнить которую необходимо с указанием того же каталога. 

Только что мы разобрались с основами создания, клонирования и удаления Git-репозитория. Удачи! 

VDS Timeweb арендовать

I can’t find the command. I tried Googling «git ‘delete a repository'».

Coleman's user avatar

Coleman

5657 silver badges15 bronze badges

asked Oct 3, 2009 at 15:30

Victor's user avatar

1

Delete the .git directory in the root-directory of your repository if you only want to delete the git-related information (branches, versions).

If you want to delete everything (git-data, code, etc), just delete the whole directory.

.git directories are hidden by default, so you’ll need to be able to view hidden files to delete it.

Sinister Beard's user avatar

answered Oct 3, 2009 at 15:39

7

To piggyback on rkj’s answer, to avoid endless prompts (and force the command recursively), enter the following into the command line, within the project folder:

$ rm -rf .git

Or to delete .gitignore and .gitmodules if any (via @aragaer):

$ rm -rf .git*

Then from the same ex-repository folder, to see if hidden folder .git is still there:

$ ls -lah

If it’s not, then congratulations, you’ve deleted your local git repo, but not a remote one if you had it. You can delete GitHub repo on their site (github.com).

To view hidden folders in Finder (Mac OS X) execute these two commands in your terminal window:

defaults write com.apple.finder AppleShowAllFiles TRUE
killall Finder

Source: http://lifehacker.com/188892/show-hidden-files-in-finder.

Community's user avatar

answered Dec 1, 2012 at 18:55

Azat's user avatar

AzatAzat

3,6242 gold badges14 silver badges13 bronze badges

6

In the repository directory you remove the directory named .git
and that’s all :). On Un*x it is hidden, so you might not see it from file browser, but

cd repository-path/
rm -r .git

should do the trick.

answered Oct 3, 2009 at 15:39

rkj's user avatar

rkjrkj

8,5272 gold badges29 silver badges35 bronze badges

2

That’s right, if you’re on a mac(unix) you won’t see .git in finder(the file browser). You can follow the directions above to delete and there are git commands that allow you to delete files as well(they are sometimes difficult to work with and learn, for example: on making a ‘git rm -r ‘ command you might be prompted with a .git/ not found. Here is the git command specs:

usage: git rm [options] [—] …

-n, --dry-run         dry run
-q, --quiet           do not list removed files
--cached              only remove from the index
-f, --force           override the up-to-date check
-r                    allow recursive removal
--ignore-unmatch      exit with a zero status even if nothing matched

When I had to do this, deleting the objects and refs didn’t matter. After I deleted the other files in the .git, I initialized a git repo with ‘git init’ and it created an empty repo.

answered Sep 1, 2012 at 21:26

LucianNovo's user avatar

LucianNovoLucianNovo

3505 silver badges14 bronze badges

3

I created a git repository with git init. I’d like to delete it entirely and init a new one.

jww's user avatar

jww

95k88 gold badges396 silver badges860 bronze badges

asked Jul 31, 2009 at 16:06

user105813's user avatar

0

Git keeps all of its files in the .git directory. Just remove that one and init again.

If you can’t find it, it’s because it is hidden.

  • In Windows 7, you need to go to your folder, click on Organize on the top left, then click on Folder and search options, then click on the View tab and click on the Show hidden files, folders and drives radio button.

  • On a Mac OS:

    • Open a Terminal (via Spotlight: press CMD + SPACE, type terminal and press Enter) and run:

      defaults write com.apple.finder AppleShowAllFiles 1 && killall Finder
      

      Note: The keyboard shortcut to show hidden files in Finder is
      CMD + SHIFT + . so it is no longer necessary to modify the
      finder config this way

    • You could also type cd (the space is important), drag and drop your git repo folder from Finder to the terminal window, press return, then type rm -fr .git, then return again.

  • On Ubuntu, use shortcut Ctrl + H.

double-beep's user avatar

double-beep

4,85916 gold badges32 silver badges41 bronze badges

answered Jul 31, 2009 at 16:08

Kristof Provost's user avatar

Kristof ProvostKristof Provost

25.8k2 gold badges24 silver badges28 bronze badges

6

If you really want to remove all of the repository, leaving only the working directory then it should be as simple as this.

rm -rf .git

The usual provisos about rm -rf apply. Make sure you have an up to date backup and are absolutely sure that you’re in the right place before running the command. etc., etc.

answered Jul 31, 2009 at 16:08

CB Bailey's user avatar

CB BaileyCB Bailey

733k101 gold badges626 silver badges651 bronze badges

5

If you want to delete all .git folders in a project use the following command:

find . -type f | grep -i ".git" | xargs rm

This will also delete all the .git folders and .gitignore files from all subfolders

answered Apr 16, 2012 at 9:25

ejazz's user avatar

ejazzejazz

2,4581 gold badge19 silver badges29 bronze badges

2

after cloning the repo

cd /repo folder/

to go to the file directory then

ls -a

to see all files hidden and unhidden

.git .. .gitignore .etc

if you like you can check the repo origin

git remote -v

now delete .git which contains everything about git

rm -rf .git

after deleting, you would discover that there is no git linked check remote again

git remote -v

now you can init your repository with

git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/Leonuch/flex.git
git push -u origin main

Anatoly's user avatar

Anatoly

19.4k3 gold badges25 silver badges41 bronze badges

answered Oct 13, 2019 at 21:10

leouonline's user avatar

leouonlineleouonline

2983 silver badges5 bronze badges

1

Alternative to killing TortoiseGit:

  • Open the TortoiseGit-Settings (right click to any folder, TortoiseGit → Settings)
  • Go to the Icon Overlays option.
  • Change the Status Cache from Default to None
  • Now you can delete the directory (either with Windows Explorer or rmdir /S /Q)
  • Set back the Status Cache from None to Default and you should be fine again…

11684's user avatar

11684

7,34612 gold badges47 silver badges70 bronze badges

answered Nov 30, 2010 at 9:51

eckes's user avatar

eckeseckes

62.8k28 gold badges169 silver badges198 bronze badges

Where $GIT_DIR is the path to the folder to be searched (the git repo path), execute the following in terminal.

find $GIT_DIR -name *.git* -ok rm -Rf {} ;

This will recursively search for any directories or files containing «.git» in the file/directory name within the specified Git directory. This will include .git/ and .gitignore files and any other .git-like assets. The command is interactive and will ask before removing. To proceed with the deletion, simply enter y, then Enter.

answered Aug 14, 2012 at 17:06

Scorpius's user avatar

ScorpiusScorpius

9991 gold badge10 silver badges22 bronze badges

0

To fully delete the .git repository in your computer (in Windows 8 and above):

  1. The .git repository is normally hidden in windows
  2. So you need to mark the «hidden items» to show the hidden folders
  3. At the top site of you directory you find «view» option
  4. Inside «view» option you find «hidden items» and mark it
  5. Then you see the .git repository then you can delete it

Paul Roub's user avatar

Paul Roub

36.2k27 gold badges82 silver badges89 bronze badges

answered Aug 7, 2017 at 16:45

squal 's user avatar

squal squal

1853 silver badges14 bronze badges

I tried:

rm -rf .git and also

Git keeps all of its files in the .git directory. Just remove that one
and init again.

Neither worked for me. Here’s what did:

  • Delete all files except for .git
  • git add . -A
  • git commit -m «deleted entire project»
  • git push

Then create / restore the project from backup:

  • Create new project files (or copy paste a backup)
  • git add . -A
  • git commit -m «recreated project»
  • git push

answered Feb 4, 2015 at 18:24

P.Brian.Mackey's user avatar

P.Brian.MackeyP.Brian.Mackey

42.6k65 gold badges231 silver badges344 bronze badges

0

you can use :

git remote remove origin

to remove a linked repo then:

git remote add origin

to add new one

answered Jan 28, 2021 at 9:39

MonirRouissi's user avatar

1

You can create an alias for it. I am using ZSH shell with Oh-my-Zsh and here is an handy alias:

# delete and re-init git
# usage: just type 'gdelinit' in a local repository
alias gdelinit="trash .git && git init"

I am using Trash to trash the .git folder since using rm is really dangerous:

trash .git

Then I am re-initializing the git repo:

git init

spongebob's user avatar

spongebob

8,13714 gold badges48 silver badges83 bronze badges

answered Dec 2, 2015 at 8:21

Ahmad Awais's user avatar

Ahmad AwaisAhmad Awais

31.5k5 gold badges74 silver badges55 bronze badges

No worries, Agreed with the above answers:

But for Private project, please follow the steps for Gitlab:

  1. Login to your account
  2. Click on Settings -> General
  3. Select your Repository (that you wants to delete)
  4. Click on ‘Advanced’ on the bottom-most
  5. Click on ‘Remove Project’
  6. You will be asked to type your project name

    This action can lead to data loss. To prevent accidental actions we ask you to confirm your intention.
    Please type ‘sample_project’ to proceed or close this modal to cancel.

  7. Now your project is deleted successfully.

answered Aug 9, 2019 at 6:28

Deepak Keynes's user avatar

Deepak KeynesDeepak Keynes

2,1615 gold badges26 silver badges55 bronze badges

In windows:

  1. Press Start Button
  2. Search Resource Monitor
  3. Under CPU Tab -> type .git -> right click rundll32 and end process

Now you can delete .git folder

Stephen Rauch's user avatar

Stephen Rauch

46.7k31 gold badges109 silver badges131 bronze badges

answered Nov 8, 2017 at 4:51

sahil khurana's user avatar

Windows cmd prompt:
(You could try the below command directly in windows cmd if you are not comfortable with grep, rm -rf, find, xargs etc., commands in git bash )

Delete .git recursively inside the project folder by the following command in cmd:

FOR /F «tokens=*» %G IN (‘DIR /B /AD /S .git‘) DO RMDIR /S /Q «%G»

answered Jan 29, 2018 at 16:38

SridharKritha's user avatar

SridharKrithaSridharKritha

7,7172 gold badges45 silver badges41 bronze badges

true,like mine was stored in USERS,so had to open USERS go to View on you upper left find Options,open it and edit folders’view options in view still to display hidden files/folders,all your folders will be displayed and you can deleted the repo manually,remember to hide the files/folders once done with the delete.

answered Jan 25, 2019 at 1:12

Shema05's user avatar

I created a git repository with git init. I’d like to delete it entirely and init a new one.

jww's user avatar

jww

95k88 gold badges396 silver badges860 bronze badges

asked Jul 31, 2009 at 16:06

user105813's user avatar

0

Git keeps all of its files in the .git directory. Just remove that one and init again.

If you can’t find it, it’s because it is hidden.

  • In Windows 7, you need to go to your folder, click on Organize on the top left, then click on Folder and search options, then click on the View tab and click on the Show hidden files, folders and drives radio button.

  • On a Mac OS:

    • Open a Terminal (via Spotlight: press CMD + SPACE, type terminal and press Enter) and run:

      defaults write com.apple.finder AppleShowAllFiles 1 && killall Finder
      

      Note: The keyboard shortcut to show hidden files in Finder is
      CMD + SHIFT + . so it is no longer necessary to modify the
      finder config this way

    • You could also type cd (the space is important), drag and drop your git repo folder from Finder to the terminal window, press return, then type rm -fr .git, then return again.

  • On Ubuntu, use shortcut Ctrl + H.

double-beep's user avatar

double-beep

4,85916 gold badges32 silver badges41 bronze badges

answered Jul 31, 2009 at 16:08

Kristof Provost's user avatar

Kristof ProvostKristof Provost

25.8k2 gold badges24 silver badges28 bronze badges

6

If you really want to remove all of the repository, leaving only the working directory then it should be as simple as this.

rm -rf .git

The usual provisos about rm -rf apply. Make sure you have an up to date backup and are absolutely sure that you’re in the right place before running the command. etc., etc.

answered Jul 31, 2009 at 16:08

CB Bailey's user avatar

CB BaileyCB Bailey

733k101 gold badges626 silver badges651 bronze badges

5

If you want to delete all .git folders in a project use the following command:

find . -type f | grep -i ".git" | xargs rm

This will also delete all the .git folders and .gitignore files from all subfolders

answered Apr 16, 2012 at 9:25

ejazz's user avatar

ejazzejazz

2,4581 gold badge19 silver badges29 bronze badges

2

after cloning the repo

cd /repo folder/

to go to the file directory then

ls -a

to see all files hidden and unhidden

.git .. .gitignore .etc

if you like you can check the repo origin

git remote -v

now delete .git which contains everything about git

rm -rf .git

after deleting, you would discover that there is no git linked check remote again

git remote -v

now you can init your repository with

git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/Leonuch/flex.git
git push -u origin main

Anatoly's user avatar

Anatoly

19.4k3 gold badges25 silver badges41 bronze badges

answered Oct 13, 2019 at 21:10

leouonline's user avatar

leouonlineleouonline

2983 silver badges5 bronze badges

1

Alternative to killing TortoiseGit:

  • Open the TortoiseGit-Settings (right click to any folder, TortoiseGit → Settings)
  • Go to the Icon Overlays option.
  • Change the Status Cache from Default to None
  • Now you can delete the directory (either with Windows Explorer or rmdir /S /Q)
  • Set back the Status Cache from None to Default and you should be fine again…

11684's user avatar

11684

7,34612 gold badges47 silver badges70 bronze badges

answered Nov 30, 2010 at 9:51

eckes's user avatar

eckeseckes

62.8k28 gold badges169 silver badges198 bronze badges

Where $GIT_DIR is the path to the folder to be searched (the git repo path), execute the following in terminal.

find $GIT_DIR -name *.git* -ok rm -Rf {} ;

This will recursively search for any directories or files containing «.git» in the file/directory name within the specified Git directory. This will include .git/ and .gitignore files and any other .git-like assets. The command is interactive and will ask before removing. To proceed with the deletion, simply enter y, then Enter.

answered Aug 14, 2012 at 17:06

Scorpius's user avatar

ScorpiusScorpius

9991 gold badge10 silver badges22 bronze badges

0

To fully delete the .git repository in your computer (in Windows 8 and above):

  1. The .git repository is normally hidden in windows
  2. So you need to mark the «hidden items» to show the hidden folders
  3. At the top site of you directory you find «view» option
  4. Inside «view» option you find «hidden items» and mark it
  5. Then you see the .git repository then you can delete it

Paul Roub's user avatar

Paul Roub

36.2k27 gold badges82 silver badges89 bronze badges

answered Aug 7, 2017 at 16:45

squal 's user avatar

squal squal

1853 silver badges14 bronze badges

I tried:

rm -rf .git and also

Git keeps all of its files in the .git directory. Just remove that one
and init again.

Neither worked for me. Here’s what did:

  • Delete all files except for .git
  • git add . -A
  • git commit -m «deleted entire project»
  • git push

Then create / restore the project from backup:

  • Create new project files (or copy paste a backup)
  • git add . -A
  • git commit -m «recreated project»
  • git push

answered Feb 4, 2015 at 18:24

P.Brian.Mackey's user avatar

P.Brian.MackeyP.Brian.Mackey

42.6k65 gold badges231 silver badges344 bronze badges

0

you can use :

git remote remove origin

to remove a linked repo then:

git remote add origin

to add new one

answered Jan 28, 2021 at 9:39

MonirRouissi's user avatar

1

You can create an alias for it. I am using ZSH shell with Oh-my-Zsh and here is an handy alias:

# delete and re-init git
# usage: just type 'gdelinit' in a local repository
alias gdelinit="trash .git && git init"

I am using Trash to trash the .git folder since using rm is really dangerous:

trash .git

Then I am re-initializing the git repo:

git init

spongebob's user avatar

spongebob

8,13714 gold badges48 silver badges83 bronze badges

answered Dec 2, 2015 at 8:21

Ahmad Awais's user avatar

Ahmad AwaisAhmad Awais

31.5k5 gold badges74 silver badges55 bronze badges

No worries, Agreed with the above answers:

But for Private project, please follow the steps for Gitlab:

  1. Login to your account
  2. Click on Settings -> General
  3. Select your Repository (that you wants to delete)
  4. Click on ‘Advanced’ on the bottom-most
  5. Click on ‘Remove Project’
  6. You will be asked to type your project name

    This action can lead to data loss. To prevent accidental actions we ask you to confirm your intention.
    Please type ‘sample_project’ to proceed or close this modal to cancel.

  7. Now your project is deleted successfully.

answered Aug 9, 2019 at 6:28

Deepak Keynes's user avatar

Deepak KeynesDeepak Keynes

2,1615 gold badges26 silver badges55 bronze badges

In windows:

  1. Press Start Button
  2. Search Resource Monitor
  3. Under CPU Tab -> type .git -> right click rundll32 and end process

Now you can delete .git folder

Stephen Rauch's user avatar

Stephen Rauch

46.7k31 gold badges109 silver badges131 bronze badges

answered Nov 8, 2017 at 4:51

sahil khurana's user avatar

Windows cmd prompt:
(You could try the below command directly in windows cmd if you are not comfortable with grep, rm -rf, find, xargs etc., commands in git bash )

Delete .git recursively inside the project folder by the following command in cmd:

FOR /F «tokens=*» %G IN (‘DIR /B /AD /S .git‘) DO RMDIR /S /Q «%G»

answered Jan 29, 2018 at 16:38

SridharKritha's user avatar

SridharKrithaSridharKritha

7,7172 gold badges45 silver badges41 bronze badges

true,like mine was stored in USERS,so had to open USERS go to View on you upper left find Options,open it and edit folders’view options in view still to display hidden files/folders,all your folders will be displayed and you can deleted the repo manually,remember to hide the files/folders once done with the delete.

answered Jan 25, 2019 at 1:12

Shema05's user avatar

Delete Git repo locally

There’s not trick in terms of how to delete a Git repo locally from your computer. You just need to delete all of the content from the folder in which the Git repo was either cloned or initialized. That’s it.

Okay, maybe there is a bit of a trick. Every Git repo has a hidden folder named .git in which the DVCS tool stores all of its configuration data. If your computer hasn’t been configured to show hidden files and folders, attempts to locally delete a Git repo will fail, because the hidden .git folder will remain. Configure your computer to show local folders, delete the .git folder using your operating system’s File Explorer, the the local Git repository is removed.

Steps to delete a local Git repo

To delete a Git repository locally, follow these steps:

  1. Open the the local Git repo’s root folder
  2. Delete all of the files and folder in the Git repo’s root folder
  3. Delete the hidden .git folder with File Explorer or through the command line
  4. Run a git status command. A fatal: not a git repository error verifies that the Git repo is deleted

Command line Git repository delete

If you’re familiar with the terminal window or the DOS prompt, you can easily perform a command line Git repository delete. Just run the rm command with the -f and -r switch to recursively remove the .git folder and all of the files and folders it contains.

This Git repo remove command also allows you to delete the Git repo while allowing all of the other files and folder to remain untouched.

[email protected]  /c/remove/repository (main-branch)
$ rm -fr .git

Verify Git repo is removed

If you use the Git BASH terminal window to remove the Git repository, you will notice the name of the current Git branch is no longer listed once the Git removal command is issued.

[email protected]  /c/remove/repository
$ git status fatal: not a git repository 
(or any of the parent directories): .git

Furthermore, any git commands you issue will return with a fatal: not a git repository error. While errors aren’t typically the way we seek confirmation in the software development work, in this case, seeing this fatal error is proof that the local Git repository delete operation ran successfully.

delete git repository

The way to delete a Git repo locally is to simply remove the hidden .git folder.

В последние годы популярность git демонстрирует взрывной рост. Эта система контроля версий используется различными проектами с открытым исходным кодом.

Новичков часто пугает большое количество замысловатых команд и сложных аргументов. Но для начала все они и не нужны. Можно начать с изучения наиболее часто используемых команд, и после этого постепенно расширять свои знания. Именно так мы и поступим в этой статье. Поехали!

Основы

Git — это набор консольных утилит, которые отслеживают и фиксируют изменения в файлах (чаще всего речь идет об исходном коде программ, но вы можете использовать его для любых файлов на ваш вкус). Изначально Git был создан Линусом Торвальдсом при разработке ядра Linux. Однако инструмент так понравился разработчикам, что в последствии, он получил широкое распространение и его стали использовать в других проектах. С его помощью вы можете сравнивать, анализировать, редактировать, сливать изменения и возвращаться назад к последнему сохранению. Этот процесс называется контролем версий.

Для чего он нужен? Ну во-первых, чтобы отследить изменения, произошедшие с проектом, со временем. Проще говоря, мы можем посмотреть как менялись файлы программы, на всех этапах разработки и при необходимости вернуться назад и что-то отредактировать. Часто бывают ситуации, когда, во вполне себе работающий код, вам нужно внести определенные правки или улучшить какой-то функционал, по желанию заказчика. Однако после внедрения нововведений, вы с ужасом понимаете, что все сломалось. У вас начинается судорожно дергаться глаз, а в воздухе повисает немой вопрос: “Что делать?” Без системы контроля версий, вам надо было бы долго напряженно просматривать код, чтобы понять как было до того, как все перестало работать. С Гитом же, все что нужно сделать — это откатиться на коммит назад.

Во-вторых он чрезвычайно полезен при одновременной работе нескольких специалистов, над одним проектом. Без Гита случится коллапс, когда разработчики, скопировав весь код из главной папки и сделав с ним задуманное, попытаются одновременно вернуть весь код обратно.
Git является распределенным, то есть не зависит от одного центрального сервера, на котором хранятся файлы. Вместо этого он работает полностью локально, сохраняя данные в директориях на жестком диске, которые называются репозиторием. Тем не менее, вы можете хранить копию репозитория онлайн, это сильно облегчает работу над одним проектом для нескольких людей. Для этого используются сайты вроде github и bitbucket.

Установка

Установить git на свою машину очень просто:

  • Linux — нужно просто открыть терминал и установить приложение при помощи пакетного менеджера вашего дистрибутива. Для Ubuntu команда будет выглядеть следующим образом:
    sudo apt-get install git
  • Windows — мы рекомендуем git for windows, так как он содержит и клиент с графическим интерфейсом, и эмулятор bash.
  • OS X — проще всего воспользоваться homebrew. После его установки запустите в терминале:
    brew install git

Если вы новичок, клиент с графическим интерфейсом(например GitHub Desktop и Sourcetree) будет полезен, но, тем не менее, знать команды очень важно.

Настройка

Итак, мы установили git, теперь нужно добавить немного настроек. Есть довольно много опций, с которыми можно играть, но мы настроим самые важные: наше имя пользователя и адрес электронной почты. Откройте терминал и запустите команды:

git config --global user.name "My Name"
git config --global user.email myEmail@example.com

Теперь каждое наше действие будет отмечено именем и почтой. Таким образом, пользователи всегда будут в курсе, кто отвечает за какие изменения — это вносит порядок.
Git хранит весь пакет конфигураций в файле .gitconfig, находящемся в вашем локальном каталоге. Чтобы сделать эти настройки глобальными, то есть применимыми ко всем проектам, необходимо добавить флаг –global. Если вы этого не сделаете, они будут распространяться только на текущий репозиторий.
Для того, чтобы посмотреть все настройки системы, используйте команду:

git config --list

Для удобства и легкости зрительного восприятия, некоторые группы команд в Гит можно выделить цветом, для этого нужно прописать в консоли:

git config --global color.ui true
git config --global color.status auto
git config --global color.branch auto

Если вы не до конца настроили систему для работы, в начале своего пути — не беда. Git всегда подскажет разработчику, если тот запутался, например:

  1. Команда git —help — выводит общую документацию по git
  2. Если введем git log —help — он предоставит нам документацию по какой-то определенной команде (в данном случае это — log)
  3. Если вы вдруг сделали опечатку — система подскажет вам нужную команду
  4. После выполнения любой команды — отчитается о том, что вы натворили
  5. Также Гит прогнозирует дальнейшие варианты развития событий и всегда направит разработчика, не знающего, куда двигаться дальше

Тут стоит отметить, что подсказывать система будет на английском, но не волнуйтесь, со временем вы изучите несложный алгоритм ее работы и будете разговаривать с ней на одном языке.

Создание нового репозитория

Как мы отметили ранее, git хранит свои файлы и историю прямо в папке проекта. Чтобы создать новый репозиторий, нам нужно открыть терминал, зайти в папку нашего проекта и выполнить команду init. Это включит приложение в этой конкретной папке и создаст скрытую директорию .git, где будет храниться история репозитория и настройки.
Создайте на рабочем столе папку под названием git_exercise. Для этого в окне терминала введите:

$ mkdir Desktop/git_exercise/
$ cd Desktop/git_exercise/
$ git init

Командная строка должна вернуть что-то вроде:

Initialized empty Git repository in /home/user/Desktop/git_exercise/.git/

Это значит, что наш репозиторий был успешно создан, но пока что пуст. Теперь создайте текстовый файл под названием hello.txt и сохраните его в директории git_exercise.

Определение состояния

status — это еще одна важнейшая команда, которая показывает информацию о текущем состоянии репозитория: актуальна ли информация на нём, нет ли чего-то нового, что поменялось, и так далее. Запуск git status на нашем свежесозданном репозитории должен выдать:

$ git status
On branch master
Initial commit
Untracked files:
(use "git add ..." to include in what will be committed)
hello.txt

Сообщение говорит о том, что файл hello.txt неотслеживаемый. Это значит, что файл новый и система еще не знает, нужно ли следить за изменениями в файле или его можно просто игнорировать. Для того, чтобы начать отслеживать новый файл, нужно его специальным образом объявить.

Подготовка файлов

В git есть концепция области подготовленных файлов. Можно представить ее как холст, на который наносят изменения, которые нужны в коммите. Сперва он пустой, но затем мы добавляем на него файлы (или части файлов, или даже одиночные строчки) командой add и, наконец, коммитим все нужное в репозиторий (создаем слепок нужного нам состояния) командой commit.
В нашем случае у нас только один файл, так что добавим его:

$ git add hello.txt

Если нам нужно добавить все, что находится в директории, мы можем использовать

$ git add -A

Проверим статус снова, на этот раз мы должны получить другой ответ:

$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached ..." to unstage)
new file: hello.txt

Файл готов к коммиту. Сообщение о состоянии также говорит нам о том, какие изменения относительно файла были проведены в области подготовки — в данном случае это новый файл, но файлы могут быть модифицированы или удалены.

Фиксация изменений

Как сделать коммит

Представим, что нам нужно добавить пару новых блоков в html-разметку (index.html) и стилизовать их в файле style.css. Для сохранения изменений, их необходимо закоммитить. Но сначала, мы должны обозначить эти файлы для Гита, при помощи команды git add, добавляющей (или подготавливающей) их к коммиту. Добавлять их можно по отдельности:

git add index.html
git add css/style.css

или вместе — всё сразу:

git add .

Конечно добавлять всё сразу удобнее, чем прописывать каждую позицию отдельно. Однако, тут надо быть внимательным, чтобы не добавить по ошибке ненужные элементы. Если же такое произошло изъять оттуда ошибочный файл можно при помощи команды

git reset:
git reset css/style.css

Теперь создадим непосредственно сам коммит

git commit -m 'Add some code'

Флажок -m задаст commit message — комментарий разработчика. Он необходим для описания закоммиченных изменений. И здесь работает золотое правило всех комментариев в коде: «Максимально ясно, просто и содержательно обозначь написанное!»

Как посмотреть коммиты

Для просмотра все выполненных фиксаций можно воспользоваться историей коммитов. Она содержит сведения о каждом проведенном коммите проекта. Запросить ее можно при помощи команды:

git log

В ней содержится вся информация о каждом отдельном коммите, с указанием его хэша, автора, списка изменений и даты, когда они были сделаны. Отследить интересующие вас операции в списке изменений, можно по хэшу коммита, при помощи команды git show :

git show hash_commit

Ну а если вдруг нам нужно переделать commit message и внести туда новый комментарий, можно написать следующую конструкцию:

git commit --amend -m 'Новый комментарий'

В данном случае сообщение последнего коммита перезапишется. Но злоупотреблять этим не стоит, поскольку эта операция опасная и лучше ее делать до отправки коммита на сервер.

Удаленные репозитории

Сейчас наш коммит является локальным — существует только в директории .git на нашей файловой системе. Несмотря на то, что сам по себе локальный репозиторий полезен, в большинстве случаев мы хотим поделиться нашей работой или доставить код на сервер, где он будет выполняться.

1. Что такое удаленный репозиторий

Репозиторий, хранящийся в облаке, на стороннем сервисе, специально созданном для работы с git имеет ряд преимуществ. Во-первых — это своего рода резервная копия вашего проекта, предоставляющая возможность безболезненной работы в команде. А еще в таком репозитории можно пользоваться дополнительными возможностями хостинга. К примеру -визуализацией истории или возможностью разрабатывать вашу программу непосредственно в веб-интерфейсе.
Клонирование
Клонирование — это когда вы копируете удаленный репозиторий к себе на локальный ПК. Это то, с чего обычно начинается любой проект. При этом вы переносите себе все файлы и папки проекта, а также всю его историю с момента его создания. Чтобы склонировать проект, сперва, необходимо узнать где он расположен и скопировать ссылку на него. В нашем руководстве мы будем использовать адрес https://github.com/tutorialzine/awesome-project, но вам посоветуем, попробовать создать свой репозиторий в GitHub, BitBucket или любом другом сервисе:

git clone https://github.com/tutorialzine/awesome-project

При клонировании в текущий каталог, там будет создана папка, в которую поместятся все проектные файлы и скрытая директория .git, с самим репозиторием, или с необходимой информацией о нем. В такой ситуации, для клонируемого репозитория, по умолчанию, будет создана папка с одноименным названием, но его можно залить и в другую директорию, например:

git clone https://github.com/tutorialzine/awesome-project new-folder

2. Подключение к удаленному репозиторию

Чтобы загрузить что-нибудь в удаленный репозиторий, сначала нужно к нему подключиться. Регистрация и установка может занять время, но все подобные сервисы предоставляют хорошую документацию.
Чтобы связать наш локальный репозиторий с репозиторием на GitHub, выполним следующую команду в терминале. Обратите внимание, что нужно обязательно изменить URI репозитория на свой.

# This is only an example. Replace the URI with your own repository address.
$ git remote add origin https://github.com/tutorialzine/awesome-project.git

Проект может иметь несколько удаленных репозиториев одновременно. Чтобы их различать, мы дадим им разные имена. Обычно главный репозиторий называется origin.

3. Отправка изменений на сервер

Сейчас самое время переслать наш локальный коммит на сервер. Этот процесс происходит каждый раз, когда мы хотим обновить данные в удаленном репозитории.
Команда, предназначенная для этого — push. Она принимает два параметра: имя удаленного репозитория (мы назвали наш origin) и ветку, в которую необходимо внести изменения (master — это ветка по умолчанию для всех репозиториев).

$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 212 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/tutorialzine/awesome-project.git
* [new branch] master -> master

Эта команда немного похожа на git fetch, с той лишь разницей, что при помощи fetch мы импортируем коммиты в локальную ветку, а применив push, мы экспортируем их из локальной в удаленную. Если вам необходимо настроить удаленную ветку используйте git remote. Однако пушить надо осторожно, ведь рассматриваемая команда перезаписывает безвозвратно все изменения. В большинстве случаев, ее используют, чтобы опубликовать выгружаемые локальные изменения в центральный репозиторий. А еще ее применяют для того, чтобы поделиться, внесенными в локальный репозиторий, нововведениями, с коллегами или другими удаленными участниками разработки проекта. Подытожив сказанное, можно назвать git push — командой выгрузки, а git pull и git fetch — командами загрузки или скачивания. После того как вы успешно запушили измененные данные, их необходимо внедрить или интегрировать, при помощи команды слияния git merge.
В зависимости от сервиса, который вы используете, вам может потребоваться аутентифицироваться, чтобы изменения отправились. Если все сделано правильно, то когда вы посмотрите в удаленный репозиторий при помощи браузера, вы увидите файл hello.txt

4. Запрос изменений с сервера

Если вы сделали изменения в вашем удаленном репозитории, другие пользователи могут скачать изменения при помощи команды pull.

$ git pull origin master
From https://github.com/tutorialzine/awesome-project
* branch master -> FETCH_HEAD
Already up-to-date.

Так как новых коммитов с тех пор, как мы склонировали себе проект, не было, никаких изменений доступных для скачивания нет.

Как удалить локальный репозиторий

Вам не понравился один из ваших локальных Git-репозиториев и вы хотите стереть его со своей машины. Для этого вам всего лишь надо удалить скрытую папку «.git» в корневом каталоге репозитория. Сделать это можно 3 способами:

  1. Проще всего вручную удалить эту папку «.git» в корневом каталоге «Git Local Warehouse».
  2. Также удалить, не устраивающий вас, репозиторий можно на github. Открываете нужный вам объект и переходите в пункт меню Настройки. Там, прокрутив ползунок вниз, вы попадете в зону опасности, где один из пунктов будет называться «удаление этого хранилища».
  3. Последний метод удаления локального хранилища через командную строку, для этого в терминале необходимо ввести следующую команду:
cd repository-path/
rm -r .git

Ветвление

Во время разработки новой функциональности считается хорошей практикой работать с копией оригинального проекта, которую называют веткой. Ветви имеют свою собственную историю и изолированные друг от друга изменения до тех пор, пока вы не решаете слить изменения вместе. Это происходит по набору причин:

  • Уже рабочая, стабильная версия кода сохраняется.
  • Различные новые функции могут разрабатываться параллельно разными программистами.
  • Разработчики могут работать с собственными ветками без риска, что кодовая база поменяется из-за чужих изменений.
  • В случае сомнений, различные реализации одной и той же идеи могут быть разработаны в разных ветках и затем сравниваться.

1. Создание новой ветки

Основная ветка в каждом репозитории называется master. Чтобы создать еще одну ветку, используем команду branch <name>

$ git branch amazing_new_feature

Это создаст новую ветку, пока что точную копию ветки master.

2. Переключение между ветками

Сейчас, если мы запустим branch, мы увидим две доступные опции:

$ git branch
amazing_new_feature
* master

master — это активная ветка, она помечена звездочкой. Но мы хотим работать с нашей “новой потрясающей фичей”, так что нам понадобится переключиться на другую ветку. Для этого воспользуемся командой checkout, она принимает один параметр — имя ветки, на которую необходимо переключиться.

$ git checkout amazing_new_feature

В Git ветка — это отдельная линия разработки. Git checkout позволяет нам переключаться как между удаленными, так и меду локальными ветками. Это один из способов получить доступ к работе коллеги или соавтора, обеспечивающий более высокую продуктивность совместной работы. Однако тут надо помнить, что пока вы не закомитили изменения, вы не сможете переключиться на другую ветку. В такой ситуации нужно либо сделать коммит, либо отложить его, при помощи команды git stash, добавляющей текущие незакоммиченные изменения в стек изменений и сбрасывающей рабочую копию до HEAD’а репозитория.

3. Слияние веток

Наша “потрясающая новая фича” будет еще одним текстовым файлом под названием feature.txt. Мы создадим его, добавим и закоммитим:

$ git add feature.txt
$ git commit -m "New feature complete.”

Изменения завершены, теперь мы можем переключиться обратно на ветку master.

$ git checkout master

Теперь, если мы откроем наш проект в файловом менеджере, мы не увидим файла feature.txt, потому что мы переключились обратно на ветку master, в которой такого файла не существует. Чтобы он появился, нужно воспользоваться merge для объединения веток (применения изменений из ветки amazing_new_feature к основной версии проекта).

$ git merge amazing_new_feature

Теперь ветка master актуальна. Ветка amazing_new_feature больше не нужна, и ее можно удалить.

$ git branch -d awesome_new_feature

Если хотите создать копию удаленного репозитория — используйте git clone. Однако если вам нужна только определенная его ветка, а не все хранилище — после git clone выполните следующую команду в соответствующем репозитории:

git checkout -b <имя ветки> origin/<имя ветки>

После этого, новая ветка создается на машине автоматически.

Бывают ситуации, когда после слива каких-то изменений из рабочей ветки в исходную версию проекта, ее, по правилам хорошего тона, необходимо удалить, чтобы она более не мешалась в вашем коде. Но как это сделать?
Для локально расположенных веток существует команда:

git branch -d local_branch_name

где флажок -d являющийся опцией команды git branch — это сокращенная версия ключевого слова —delete, предназначенного для удаления ветки, а local_branch_name – название ненужной нам ветки.
Однако тут есть нюанс: удалить текущую ветку, в которую вы, в данный момент просматриваете — нельзя. Если же вы все-таки попытаетесь это сделать, система отругает вас и выдаст ошибку с таким содержанием:

Error: Cannot delete branch local_branch_name checked out at название_директории

Так что при удалении ветвей, обязательно переключитесь на другой branch.

Дополнительно

В последней части этого руководства мы расскажем о некоторых дополнительных трюках, которые могут вам помочь.

1. Отслеживание изменений, сделанных в коммитах

У каждого коммита есть свой уникальный идентификатор в виде строки цифр и букв. Чтобы просмотреть список всех коммитов и их идентификаторов, можно использовать команду log:

Вывод git log

$ git log
commit ba25c0ff30e1b2f0259157b42b9f8f5d174d80d7
Author: Tutorialzine
Date: Mon May 30 17:15:28 2016 +0300
New feature complete
commit b10cc1238e355c02a044ef9f9860811ff605c9b4
Author: Tutorialzine
Date: Mon May 30 16:30:04 2016 +0300
Added content to hello.txt
commit 09bd8cc171d7084e78e4d118a2346b7487dca059
Author: Tutorialzine
Date: Sat May 28 17:52:14 2016 +0300
Initial commit


Как вы можете заметить, идентификаторы довольно длинные, но для работы с ними не обязательно копировать их целиком — первых нескольких символов будет вполне достаточно. Чтобы посмотреть, что нового появилось в коммите, мы можем воспользоваться командой show [commit]
Вывод git show

$ git show b10cc123
commit b10cc1238e355c02a044ef9f9860811ff605c9b4
Author: Tutorialzine
Date: Mon May 30 16:30:04 2016 +0300
Added content to hello.txt
diff --git a/hello.txt b/hello.txt
index e69de29..b546a21 100644
--- a/hello.txt
+++ b/hello.txt
@@ -0,0 +1 @@
+Nice weather today, isn't it?


Чтобы увидеть разницу между двумя коммитами, используется команда diff (с указанием промежутка между коммитами):
Вывод git diff

$ git diff 09bd8cc..ba25c0ff
diff --git a/feature.txt b/feature.txt
new file mode 100644
index 0000000..e69de29
diff --git a/hello.txt b/hello.txt
index e69de29..b546a21 100644
--- a/hello.txt
+++ b/hello.txt
@@ -0,0 +1 @@
+Nice weather today, isn't it?


Мы сравнили первый коммит с последним, чтобы увидеть все изменения, которые были когда-либо сделаны. Обычно проще использовать git difftool, так как эта команда запускает графический клиент, в котором наглядно сопоставляет все изменения.

2. Возвращение файла к предыдущему состоянию

Гит позволяет вернуть выбранный файл к состоянию на момент определенного коммита. Это делается уже знакомой нам командой checkout, которую мы ранее использовали для переключения между ветками. Но она также может быть использована для переключения между коммитами (это довольно распространенная ситуация для Гита — использование одной команды для различных, на первый взгляд, слабо связанных задач).
В следующем примере мы возьмем файл hello.txt и откатим все изменения, совершенные над ним к первому коммиту. Чтобы сделать это, мы подставим в команду идентификатор нужного коммита, а также путь до файла:

$ git checkout 09bd8cc1 hello.txt

3. Исправление коммита

Если вы опечатались в комментарии или забыли добавить файл и заметили это сразу после того, как закоммитили изменения, вы легко можете это поправить при помощи commit —amend. Эта команда добавит все из последнего коммита в область подготовленных файлов и попытается сделать новый коммит. Это дает вам возможность поправить комментарий или добавить недостающие файлы в область подготовленных файлов.
Для более сложных исправлений, например, не в последнем коммите или если вы успели отправить изменения на сервер, нужно использовать revert. Эта команда создаст коммит, отменяющий изменения, совершенные в коммите с заданным идентификатором.
Самый последний коммит может быть доступен по алиасу HEAD:

$ git revert HEAD

Для остальных будем использовать идентификаторы:

$ git revert b10cc123

При отмене старых коммитов нужно быть готовым к тому, что возникнут конфликты. Такое случается, если файл был изменен еще одним, более новым коммитом. И теперь git не может найти строчки, состояние которых нужно откатить, так как они больше не существуют.

4. Разрешение конфликтов при слиянии

Помимо сценария, описанного в предыдущем пункте, конфликты регулярно возникают при слиянии ветвей или при отправке чужого кода. Иногда конфликты исправляются автоматически, но обычно с этим приходится разбираться вручную — решать, какой код остается, а какой нужно удалить.
Давайте посмотрим на примеры, где мы попытаемся слить две ветки под названием john_branch и tim_branch. И Тим, и Джон правят один и тот же файл: функцию, которая отображает элементы массива.
Джон использует цикл:

// Use a for loop to console.log contents.
for(var i=0; i<arr.length; i++) {
console.log(arr[i]);
}

Тим предпочитает forEach:

// Use forEach to console.log contents.
arr.forEach(function(item) {
console.log(item);
});

Они оба коммитят свой код в соответствующую ветку. Теперь, если они попытаются слить две ветки, они получат сообщение об ошибке:

$ git merge tim_branch
Auto-merging print_array.js
CONFLICT (content): Merge conflict in print_array.js
Automatic merge failed; fix conflicts and then commit the result.

Система не смогла разрешить конфликт автоматически, значит, это придется сделать разработчикам. Приложение отметило строки, содержащие конфликт:

Вывод

<<<<<<< HEAD // Use a for loop to console.log contents. for(var i=0; i<arr.length; i++) { console.log(arr[i]); } ======= // Use forEach to console.log contents. arr.forEach(function(item) { console.log(item); }); >>>>>>> Tim's commit.


Над разделителем ======= мы видим последний (HEAD) коммит, а под ним — конфликтующий. Таким образом, мы можем увидеть, чем они отличаются и решать, какая версия лучше. Или вовсе написать новую. В этой ситуации мы так и поступим, перепишем все, удалив разделители, и дадим git понять, что закончили.

// Not using for loop or forEach.
// Use Array.toString() to console.log contents.
console.log(arr.toString());

Когда все готово, нужно закоммитить изменения, чтобы закончить процесс:

$ git add -A
$ git commit -m "Array printing conflict resolved."

Как вы можете заметить, процесс довольно утомительный и может быть очень сложным в больших проектах. Многие разработчики предпочитают использовать для разрешения конфликтов клиенты с графическим интерфейсом. (Для запуска нужно набрать git mergetool).

5. Настройка .gitignore

В большинстве проектов есть файлы или целые директории, в которые мы не хотим (и, скорее всего, не захотим) коммитить. Мы можем удостовериться, что они случайно не попадут в git add -A при помощи файла .gitignore

  1. Создайте вручную файл под названием .gitignore и сохраните его в директорию проекта.
  2. Внутри файла перечислите названия файлов/папок, которые нужно игнорировать, каждый с новой строки.
  3. Файл .gitignore должен быть добавлен, закоммичен и отправлен на сервер, как любой другой файл в проекте.

Вот хорошие примеры файлов, которые нужно игнорировать:

  • Логи
  • Артефакты систем сборки
  • Папки node_modules в проектах node.js
  • Папки, созданные IDE, например, Netbeans или IntelliJ
  • Разнообразные заметки разработчика.

Файл .gitignore, исключающий все перечисленное выше, будет выглядеть так:

*.log
build/
node_modules/
.idea/
my_notes.txt

Символ слэша в конце некоторых линий означает директорию (и тот факт, что мы рекурсивно игнорируем все ее содержимое). Звездочка, как обычно, означает шаблон.

Git bash и git.io

Руководствуясь часто встречающимися, при изучении системы, вопросами новичков, разберем еще несколько непонятных словосочетаний.

  • Git Bash(Bourne Again Shell) — это приложение, являющееся эмулятором командной строки и предоставляющее, операционной системе, некоторые распространенные утилиты bash и собственно саму систему Git. Это терминал, используемый для взаимодействия с персональным компьютером, посредством письменных команд.
  • URL-адреса хранилищ на Гитхабе могут быть довольно длинными, из-за больших имен репозиториев и файлов. Работать с такими ссылками очень не удобно. Поэтому сайт github.io создал git.io — неплохой сервис по преобразованию этих длинных и беспорядочных URL-адресов в более короткие и понятные. Сайт был создан в 2011 году и вплоть до недавнего времени отлично справлялся со своими обязанностями. Однако в начале этого года компания Гитхаб, из-за участившихся попыток хакеров использовать сайт в злонамеренных целях, остановила работу сервиса, а чем известила пользователей в своем блоге. Разработчики популярного ресурса рекомендуют пользоваться другими URL-cutter’ами, пока работа сервиса не будет налажена.

Заключение.

Вот и все! Наше руководство окончено. Мы очень старались собрать всю самую важную информацию и изложить ее как можно более сжато и кратко.
Git довольно сложен, и в нем есть еще много функций и трюков. Если вы хотите с ними познакомиться, вот некоторые ресурсы, которые мы рекомендуем:

  • Официальная документация, включающая книгу и видеоуроки – тут.
  • “Getting git right” – Коллекция руководств и статей от Atlassian – тут.
  • Список клиентов с графическим интерфейсом – тут.
  • Онлайн утилита для генерации .gitignore файлов – тут.

Оригинал статьи доступен на сайте http://tutorialzine.com

Другие статьи по теме

10 полезных Git команд, которые облегчат работу

Шпаргалка по Git, в которой представлены основные команды

To undo the changes made by git init you should delete the git repository. Follow the steps below to make the job done.

  1. Open the Terminal by typing the Ctrl + Alt + T
  2. Next type the following command line which will delete the git repository and undo the changes made by git init:

The method to undo the changes for Window differs from other operating systems. Here are the steps to follow.

  1. Open the Run prompt by pressing Windows + R.
  2. Then, type cmd and press Shift+Ctrl+Enter to provide administrative privileges.
  3. Run the following to delete the repository and press Enter:

If the repository has subfolders, then execute:

In this section, we will demonstrate to you two ways of detecting the hidden files and deleting them in Mac OS.

  1. In the framework of the first method, first, you should open the terminal and run the code below:
    defaults write com.apple.finder AppleShowAllFiles 1 && killall Finder

    Then, you should type cmd + SHIFT +. to display hidden files in Finder.

    Then, you should also type cd, drop your git repository folder from Finder to the Terminal window, and press return.

    And, finally, you can delete them by just moving them to trash.

  2. In the framework of the second method, first, you should navigate to the root folder of the repository and run the command below:

The git init command generates a new, empty git repository or reinitializes an existing one. A repository is a storage of the project files, which makes it possible to save code versions and have access to them. This command creates a .git subdirectory which includes the metadata, like subdirectories for objects and template files to generate a new repository.

21 ответ

Git хранит все свои файлы в каталоге .git. Просто удалите этот и снова запустите.

Если вы не можете найти его, это потому, что оно скрыто.

  • В Windows 7 вам нужно перейти в свою папку, нажмите на Organize в верхнем левом углу, затем нажмите Folder and search options, затем перейдите на вкладку View и нажмите Show hidden files, folders and drives радио.

  • В Mac OS:

    • Откройте терминал (через Spotlight: нажмите CMD + SPACE, введите terminal и нажмите Enter) и выполните следующую команду: defaults write com.apple.finder AppleShowAllFiles 1 && killall Finder.

    • Или вы также можете ввести cd (важно место), перетащите папку git repo из Finder в окно терминала, нажмите return, затем введите rm -fr .git, затем return снова.

  • В Ubuntu используйте ярлык Ctrl + H.

Kristof Provost
31 июль 2009, в 16:56

Поделиться

Если вы действительно хотите удалить весь репозиторий, оставив только рабочий каталог, тогда он будет таким же простым, как это.

rm -rf .git

Применяются обычные положения о rm -rf. Убедитесь, что у вас есть обновленная резервная копия и абсолютно уверены, что вы находитесь в нужном месте перед запуском команды. и т.д. и т.д.

CB Bailey
31 июль 2009, в 17:00

Поделиться

Если вы хотите удалить все папки .git в проекте, используйте следующую команду:

find . -type f | grep -i ".git" | xargs rm

Это также удалит все папки .git и .gitignore из всех подпапок

ejazz
16 апр. 2012, в 11:12

Поделиться

cd в каталог, из которого нужно удалить git и выполнить команду

Mac OS или любой дистрибутив Linux

rm -rf .git

kamal
13 янв. 2016, в 17:10

Поделиться

Альтернатива убийству TortoiseGit:

  • Откройте TortoiseGit-Settings (щелкните правой кнопкой мыши по любой папке, TortoiseGit → Settings)
  • Перейдите в опцию Наложение значков.
  • Измените кэш состояния с по умолчанию на Нет
  • Теперь вы можете удалить каталог (либо с помощью проводника Windows, либо rmdir /S /Q)
  • Установите кеш состояния с Нет на По умолчанию, и вы снова будете в порядке…

eckes
30 нояб. 2010, в 11:28

Поделиться

Где $GIT_DIR — это путь к поисковой папке (путь репо git), выполните в терминале следующее:

find $GIT_DIR -name *.git* -ok rm -Rf {} ;

Это приведет к рекурсивному поиску любых каталогов или файлов, содержащих «.git» в имени файла/каталога в указанном каталоге git. Это будет включать файлы .git/и .gitignore и любые другие .git-подобные активы. Команда интерактивна и будет запрашивать перед удалением. Чтобы продолжить удаление, просто введите y, затем Enter.

Scorpius
14 авг. 2012, в 17:13

Поделиться

казнить

rm -rf .git

в вашей папке репо

Frosted Developer
26 июль 2018, в 15:51

Поделиться

Вы можете использовать следующую команду из командной строки —

rm -rf .git

Здесь rm означает remove, -rf означает рекурсивную силу, а .git — репо/файл, который вы хотите удалить. Будьте осторожны при использовании этой команды. Если вы попытались выполнить rm -rf любые другие файлы или папку, они могут быть удалены навсегда. Никогда не запускайте это на своем рабочем столе. Вы можете стереть всю свою работу. Будьте осторожны при использовании этой команды.

Urvashi Gupta
11 нояб. 2016, в 05:48

Поделиться

Я просто собираю те, которые лучше всего подходят для меня:

cd <repository-name>
find . -type f | grep -i ".git" | xargs rm
cd ..
rm -rf <repository-name>
mkdir <repository-name>
cd <repository-name>
git init

Chetabahana
02 июнь 2016, в 05:43

Поделиться

Перейдите в репозиторий git из git bash и введите rm -rf.git

ARPAN SARKAR
16 дек. 2018, в 04:52

Поделиться

Я сделал это, и все получилось просто отлично.
1. Удалите файл .git из репо с помощью rm -fr .git
2. Удалите папку репо с помощью rm -R pathyour_repo_name

amritpandey
09 апр. 2017, в 09:59

Поделиться

Вы можете создать для него псевдоним. Я использую оболочку ZSH с Oh-my-Zsh, и вот удобный псевдоним:

# delete and re-init git
# usage: just type 'gdelinit' in a local repository
alias gdelinit="trash .git && git init"

Я использую Trash, чтобы удалить папку .git, поскольку использование rm действительно опасно:

trash .git

Затем я повторно инициализирую git repo:

git init

Ahmad Awais
02 дек. 2015, в 09:51

Поделиться

Перейдите в указанную папку, где выполнена команда git init.

Выполнить нижеприведенную команду

rm -rf.git

Шаг № 1

Изображение 7532
Шаг № 2

Изображение 7533

Lova Chittumuri
15 нояб. 2018, в 19:15

Поделиться

Чтобы полностью удалить репозиторий .git на вашем компьютере (в Windows 8 и выше):

  • Репозиторий .git обычно скрыт в окнах
  • Итак, вам нужно отметить «скрытые элементы», чтобы показать скрытые папки
  • На верхнем сайте вашего каталога вы найдете опцию «просмотр»
  • В опции «view» вы найдете «скрытые элементы» и отметьте его
  • Затем вы увидите репозиторий .git, после чего его можно удалить.

squal
07 авг. 2017, в 18:07

Поделиться

Я пробовал:

rm -rf .git, а также

Git хранит все свои файлы в каталоге .git. Просто удалите этот и снова запустите.

Ни для меня не работало. Вот что:

  • Удалить все файлы, кроме .git
  • Git добавить. -A
  • Git commit -m «удаленный весь проект»
  • Git нажмите

Затем создайте/восстановите проект из резервной копии:

  • Создайте новые файлы проекта (или скопируйте вставьте резервную копию)
  • Git добавить. -A
  • Git commit -m «воссозданный проект»
  • Git нажмите

P.Brian.Mackey
04 фев. 2015, в 18:42

Поделиться

правда, как мой был сохранен в ПОЛЬЗОВАТЕЛЯХ, так что пришлось открыть ПОЛЬЗОВАТЕЛЕЙ, перейдите в Просмотр на верхнем левом углу, найдите Параметры, откройте его и отредактируйте параметры просмотра папок, чтобы отобразить скрытые файлы/папки, все ваши папки будут показаны Вы можете удалить репо вручную, не забудьте скрыть файлы/папки после удаления.

Shema05
25 янв. 2019, в 01:34

Поделиться

Решение для удаления одного или нескольких репо с резервной копией.

Как уже упоминали многие другие. более простой способ — использовать @CBbailey rm -rf.git из mac или linux.

Однако, если вы хотите удалить несколько репозиториев git, а также сделать их резервную копию.

Вы можете попробовать https://github.com/Peripona/bulk-clean-repos

Tarandeep Singh
06 сен. 2018, в 09:40

Поделиться

Приглашение Windows cmd: (Вы можете попробовать приведенную ниже команду непосредственно в Windows cmd, если вас не устраивают команды grep, rm -rf, find, xargs и т.д., Команды в git bash)

Удалите .git рекурсивно в папке проекта с помощью следующей команды в cmd:

FOR/F «токены = *»% G IN (‘DIR/B/AD/S.git’) DO RMDIR/S/Q «% G»

SridharKritha
29 янв. 2018, в 17:40

Поделиться

В окнах:

  • Нажмите кнопку «Пуск»
  • Монитор ресурсов поиска
  • В вкладке ЦП → введите .git → щелкните правой кнопкой мыши rundll32 и завершите процесс

Теперь вы можете удалить папку .git

sahil khurana
08 нояб. 2017, в 05:26

Поделиться

user2340356
10 апр. 2016, в 23:50

Поделиться

  • Удалите /var/www/gitorious (или где вы его установили)
  • Удалить службы в /etc/monitd
  • Удалить пользователя git
  • Удалите /usr/local/activemq и init script для него в /etc/init.d/act

Tolga Yılmaz
15 фев. 2013, в 11:00

Поделиться

Ещё вопросы

  • 1Как сгенерировать диаграммы из набора данных и сохранить как изображение?
  • 1Выборочная страница бесконечной прокрутки
  • 0Самый эффективный способ конвертировать Boost :: uint64 в Java
  • 0Jquery, Tab Panels и вопросы, устанавливающие фокус
  • 1Синтаксическая ошибка в сервисе Android
  • 1Не удается заставить циклы while работать при печати нескольких разных строк
  • 1Не получает значения JSON в Filestack v3
  • 0jQuery Изменение дочерних элементов в содержимом iFrame
  • 1После выбора столбца строки Grid перемещается в левую сторону в EditorGridPanel GWTEXT.
  • 1Как отделить символ валюты от денежной стоимости и сохранить десятичные дроби и запятые?
  • 1Java ArrayList Class
  • 1Protobuf-Net всегда десериализует пустой список
  • 0Мод переписать полностью переписать URL (игнорировать все параметры) / частично включить имя параметра
  • 0параметр постоянной функции в качестве размера статического массива?
  • 0Отправить выбранные элементы в поле?
  • 0Ошибка разбора углового выражения при попытке фильтрации массива
  • 0MySQL запись становится 1 после ввода ее в форме PHP
  • 0Сообщение проверки AngularJS не отображается, когда поле является обязательным
  • 0Возможно ли создать собственную семантическую разметку «<что-то> </ что-то>» для вашего движка шаблонов в PHP?
  • 1Python ConfigParser не может правильно искать INI-файл (Ubuntu 14, Python 3.4)
  • 0Поиск сфинкса — исключить из результатов по условию
  • 1добавить элемент в конце списка связанных ссылок [закрыт]
  • 0Добавление CSS в DIV, когда что-то нет JQuery
  • 0Расширение селектора CSS для Firefox и Chrome
  • 0по клику переключить дочерний элемент определенного класса (обработчики) — jquery
  • 0Преобразование шаблона CSS в asp.net с мастер-страницами
  • 1Панды — как изменить ячейку в соответствии со средним числом следующих 10 клеток
  • 0Как изменить или отобразить объект JSON, используя jquery и mvc Model
  • 0Нет записей Console.logs в Chrome или ng-repeat
  • 1Элементы подстроки в Пандах
  • 1Найдите, какие точки доступа Wi-Fi являются общедоступными или защищены с помощью программного обеспечения
  • 1AWS лямбда-проблема с psycopg2
  • 1Не найдено ни одного действия, соответствующего URI запроса
  • 1Десериализация DateTime из C # CLR
  • 1Windows Phone 8.1 Как добавить семейство шрифтов
  • 1Android карты вид сбоя приложение
  • 0Использование пользовательского ввода из поля ввода
  • 0работает под углом после загрузки всей страницы
  • 1Тайм-аут для функции
  • 0Разбить строку на две части на основе одного из префиксов в массиве
  • 1Только спрайт XNA Исчезает, когда игрок пересекает
  • 1Почему мы пишем функцию onload () перед тем, как написать send () в XMLHttpRequest
  • 1Лучший избыточный подход для связи сервер / клиент в C #
  • 0Разрешения для вложенных папок HTML
  • 0Обновление углового обзора из обратного вызова SignalR
  • 1Переместить указатель влево, согласно сетке
  • 1Как разорвать петлю в питоне
  • 1Javascript действует по-разному в inappbrowser и Chrome — неопределенные глобальные переменные
  • 0Запретить ввод формы кнопки ввода, если ввод электронной почты находится в фокусе (jquery)
  • 1QThread не обновляет представление событиями
  1. Remove Git Directory Using GUI
  2. Rename Git Directory Using Command Line

Fully Delete a Git Repository

Initializing git repository using git init or cloning the git repo from GitHub also comes with a .git directory containing different directories/files related to the project.

Locally deleting a git repository sounds like one of the easiest things to accomplish; however, since the .git folder is initially hidden, the removal of the folder varies according to a different OS.

This article will use the command line and GUI to delete the repository and reinitialize it.

Remove Git Directory Using GUI

In Windows, if using a graphical user interface, we first need to enable the show hidden files option. This can be done by following this article. After seeing the hidden folder, we can delete the .git folder and then again reinitialize if needed.

Rename Git Directory Using Command Line

With the usage of the command line, the task is rather simpler. First, we need to navigate to the repository which was cloned or where we had initialized git. We can do that using:

Once inside the folder, we can list the visible as well as hidden folders:

For example, the output is similar to the one below.

total 24
drwxr-xr-x  4 mario mario  4096 Nov 21 00:02 .
drwxrwxrwt 24 root    root    12288 Nov 21 00:02 ..
drwxr-xr-x  2 mario mario  4096 Nov 21 00:02 frontend
drwxr-xr-x  7 mario mario  4096 Nov 21 00:02 .git

Here, in the last line, we can see the folder named .git, we ought to remove the folder by using:

The flags -f is for forcefully removing the nonexistent files and arguments without prompting (be careful with its usage).

The flag -r is for recursively deleting each directory and its contents.

We can check if the directory is initialized with git or not by using the git status command.

It will throw the following error if the folder is not initialized with git.

fatal: not a git repository (or any of the parent directories): .git

Then, we can reinitialize the folder with the git init command.

Шпаргалка по консольным командам Git

Консольные команды

Создать новый репозиторий

git init # создать новый проект в текущей папке
git init folder-name # создать новый проект в указанной папке

Клонирование репозитория

git clone git@github.com:nicothin/web-design.git # клонировать удаленный репозиторий в одноименную папку
git clone git@github.com:nicothin/web-design.git foldername # клонировать удаленный репозиторий в папку «foldername»
git clone git@github.com:nicothin/web-design.git . # клонировать репозиторий в текущую папку

Добавление файлов к отслеживанию, индексация отслеживаемых

git add text.txt # добавить к отслеживанию этот существующий файл
git add . # добавить к отслеживанию все новые файлы из текущей папки и её подпапок, индексировать отслеживаемые файлы
git add -i # запуск оболочки интерактивного индексирования для добавления в индекс только выбранных файлов (см. [git-scm.com](http://git-scm.com/book/ru/v1/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-Git-%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5))
git add -p # поочередный просмотр файлов с показом изменений и задаваемым вопросом об отслеживании/индексировании (удобно для добавления в коммит только каких-то конкретных файлов)

Убирание файла, папки из отслеживания

git rm --cached readme.txt # удалить файл из отслеживаемых (файл останется на месте)
git rm --cached -r folder # удалить папку из отслеживаемых (папка останется на месте)

Отмена индексации

git reset HEAD # убрать из индекса все индексированные файлы
git reset HEAD text.txt # убрать из индекса указанный файл

Просмотр изменений

git diff # посмотреть непроиндексированные изменения (если есть, иначе ничего не выведет)
git diff --staged # посмотреть проиндексированные изменения (если есть, иначе ничего не выведет)

Отмена изменений

git checkout -- text.txt # ОПАСНО: отменить все изменения, внесенные в отслеживаемый файл со времени предыдущего коммита (файл не добавлен в индекс)
git checkout -- .     # ОПАСНО: отменить изменения во всех непроиндексированных отслеживаемых файлах
git checkout text.txt # ОПАСНО: отменить изменения в непроиндексированном файле

Коммиты

git commit -m "Name of commit" # закоммитить отслеживаемые индексированные файлы (указано название коммита)
git commit -a -m "Name of commit" # закоммитить отслеживаемые индексированные файлы (указано название коммита, не требует git add, не добавит в коммит неотслеживаемые файлы)
git commit # закоммитить отслеживаемые индексированные файлы (откроется редактор для введения названия коммита)
git commit --amend # изменить последний коммит (Insert — режим ввода, : — командный режим; в командном режиме: :wq — сохранить и выйти)
git commit --amend -m "Новое название" # переименовать последний коммит (только если ещё не был отправлен в удалённый репозиторий)

Отмена коммитов

git revert HEAD --no-edit # создать новый коммит, отменяющий изменения последнего коммита без запуска редактора сообщения
git revert b9533bb --no-edit # создать новый коммит, отменяющий изменения указанного (b9533bb) коммита без запуска редактора сообщения (указаны первые 7 символов хеша коммита)
git reset --hard 75e2d51 # вернуть репозиторий в состояние коммита с указанным хешем ОПАСНО! пропадет вся работа, сделанная после этого коммита

Временно переключиться на другой коммит

git checkout b9533bb # временно переключиться на коммит с указанным хешем
git checkout master # вернуться к последнему коммиту в указанной ветке

Переключиться на другой коммит и продолжить работу с него

Потребуется создание новой ветки, начинающейся с указанного коммита.

git checkout -b new-branch 5589877 # создать ветку new-branch, начинающуюся с коммита 5589877

Удаление файла (просто удалить отслеживаемый файл из папки недостаточно, нужно сделать его неотслеживаемым и отправить коммит)

git rm text.txt # удалить из отслеживаемых неиндексированный файл (файл будет удален из папки)
git rm -f text.txt # удалить из отслеживаемых индексированный файл (файл будет удален из папки)
git rm -r log/ # удалить из отслеживаемых всё содержимое папки log/ (папка будет удалена)
git rm ind* # удалить из отслеживаемых все файлы с именем, начинающимся на «ind» в текущей папке (файлы будут удалены из папки)
git rm --cached readme.txt # удалить из отслеживаемых индексированный файл (файл останется на месте)

Перемещение/переименование файлов (Git не отслеживает перемещения/переименование, но пытается его угадать)

git mv text.txt test_new.txt # переименовать файл «text.txt» в «test_new.txt»
git mv readme_new.md folder/ # переместить файл readme_new.md в папку folder/ (должна существовать)

История изменений

git log -p index.html # показать историю изменений файла index.html (выход из длинного лога: Q)
git log -p -5 index.html # показать историю изменений файла index.html (последние 5 коммитов, выход из длинного лога: Q)
git log -2 # показать последние 2 коммита
git log -2 --stat # показать последние 2 коммита и статистику внесенных ими изменений
git log -p -22 # показать последние 22 коммита и внесенную ими разницу на уровне строк (выход из длинного лога: Q)
git log --pretty=format:"%h - %an, %ar : %s" -4 # показать последние 4 коммита с форматированием выводимых данных
git log --graph -10 # показать последние 10 коммитов с ASCII-представлением ветвления
git log --since=2.weeks # показать коммиты за последние 2 недели
git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short # мой формат вывода, висящий на алиасе оболочки
git log master..branch_99 # показать коммиты из ветки branch_99, которые не влиты в master
git log branch_99..master # показать коммиты из ветки master, которые не влиты в branch_99
git show 60d6582 # показать изменения из коммита с указанным хешем
git show HEAD^ # показать данные о предыдущем коммите

Ветки

git branch # показать список веток
git branch -v # показать список веток и последний коммит в каждой
git branch new_branch # создать новую ветку с указанным именем
git checkout new_branch # перейти в указанную ветку
git checkout -b new_branch # создать новую ветку с указанным именем и перейти в неё
git merge hotfix # влить в ветку, в которой находимся, данные из ветки hotfix
git branch -d hotfix # удалить ветку hotfix (если её изменения уже влиты в главную ветку)
git branch --merged # показать ветки, уже слитые с активной (их можно удалять)
git branch --no-merged # показать ветки, не слитые с активной
git branch -a # показать все имеющиеся ветки (в т.ч. на удаленных репозиториях)
git branch -m old_branch_name new_branch_name # переименовать локально ветку old_branch_name в new_branch_name
git branch -m new_branch_name # переименовать локально ТЕКУЩУЮ ветку в new_branch_name
git push origin :old_branch_name new_branch_name # применить переименование в удаленном репозитории
git branch --unset-upstream # завершить процесс переименования

Удалённые репозитории

git remote -v # показать список удалённых репозиториев, связанных с этим
git remote remove origin # убрать привязку удалённого репозитория с сокр. именем origin
git remote add origin git@github.com:nicothin/test.git # добавить удалённый репозиторий (с сокр. именем origin) с указанным URL
git remote rm origin # удалить привязку удалённого репозитория
git remote show origin # получить данные об удалённом репозитории с сокращенным именем origin
git fetch origin # скачать все ветки с удаленного репозитория (с сокр. именем origin), но не сливать со своими ветками
git fetch origin master # то же, но скачивается только указанная ветка
git checkout origin/github_branch # посмотреть ветку, скачанную с удалённого репозитория (локальной редактируемой копии не создаётся! если нужно редактировать, придётся влить)
git checkout --track origin/github_branch # создать локальную ветку github_branch (данные взять из удалённого репозитория с сокр. именем origin, ветка github_branch) и переключиться на неё
git push origin master # отправить в удалённый репозиторий (с сокр. именем origin) данные своей ветки master
git pull origin # влить изменения с удалённого репозитория (все ветки)
git pull origin master # влить изменения с удалённого репозитория (только указанная ветка)

Разное

git clean -f -d # удалить из репозитория все неотслеживаемые папки и файлы (папки и файлы, добавленные в .gitignore останутся на месте)

Примеры

Собираем коллекцию простых и сложных примеров работы

Начало работы

Создание нового репозитория, первый коммит, привязка удалённого репозитория с gthub.com, отправка изменений в удалённый репозиторий.

# указана последовательность действий:
git init # инициируем гит в этой папке
touch readme.md # создаем файл readme.md
git add readme.md # делаем этот файл отслеживаемым
git commit -m "Первый коммит" # создаем первый коммит с вменяемым названием
git remote add origin git@github.com:nicothin/test.git # добавляем предварительно созданный пустой удаленный репозиторий
git push origin master # отправляем данные из локального репозитория в удаленный (в ветку master)

Обычный рабочий процесс

Создание нового репозитория на github.com, клонирование к себе, работа, периодическая «синхронизация с github.com».

# указана последовательность действий:
# создаём на github.com репозиторий, копируем его URL клонирования (SSH)
# в консоли попадаем в свою папку для всех проектов
git clone АДРЕС_РЕПОЗИТОРИЯ ПАПКА_ПРОЕКТА # клонируем удалённый репозиторий к себе на компьютер (если не указать ПАПУ_ПРОЕКТА, будет создана папка, совпадающая по имени с названием репозитория)
cd ПАПКА_ПРОЕКТА # переходим в папку проекта (указана команда для git bash)
# редактируем файлы, добавляем файлы и/или папки (если удаляем файлы — см. секцию про удаление файлов)
git add . # делаем все новые файлы в этой папке отслеживаемыми и готовыми к коммиту
git commit -m "НАЗВАНИЕ_КОММИТА" # создаем коммит с вменяемым названием
git push origin master # отправляем данные из локального репозитория в удаленный (в ветку master)
# снова вносим какие-то изменения (если удаляем файлы — см. секцию про удаление файлов)
# возвращаемся к шагу с git add . и проходим цикл заново

Не обязательно после каждого коммита отправлять изменения в удаленный репозиторий, можно сделать это один раз в конце работы.

Внесение изменений в коммит

# указана последовательность действий:
subl inc/header.html # редактируем и сохраняем разметку «шапки»
git add inc/header.html # индексируем измененный файл
git commit -m "Убрал телефон из шапки" # делаем коммит
# ВНИМАНИЕ: коммит пока не был отправлен в удалённый репозиторий
# сознаём, что нужно было еще что-то сделать в этом коммите
# вносим изменения
git add inc/header.html # индексируем измененный файл (можно git add .)
git commit --amend -m "«Шапка»: выполнена задача №34 (вставить-вынуть)" # заново делаем коммит

Работа с ветками

Есть master (публичная версия сайта), хотим масштабно что-то поменять (переверстать «шапку»), но по ходу работ возникает необходимость подправить критичный баг (неправильно указан контакт в «подвале»).

# указана последовательность действий:
git checkout -b new_page_header # создадим новую ветку для задачи изменения «шапки» и перейдём в неё
subl inc/header.html # редактируем и сохраняем разметку «шапки»
git commit -a -m "Новая шапка: смена логотипа" # делаем первый коммит (работа еще не завершена)
# тут выясняется, что есть баг с контактом в «подвале»
git checkout master # возвращаемся к ветке master
git checkout -b footer_hotfix # создаём ветку (основанную на master) для решения проблемы
subl inc/footer.html # устраняем баг и сохраняем разметку «подвала»
git commit -a -m "Исправление контакта в подвале" # делаем коммит
git checkout master # переключаемся в ветку master
git merge footer_hotfix # вливаем в master изменения из ветки footer_hotfix
git branch -d footer_hotfix # удаляем ветку footer_hotfix
git checkout new_page_header # переключаемся в ветку new_page_header для продолжения работ над «шапкой»
subl inc/header.html # редактируем и сохраняем разметку «шапки»
git commit -a -m "Новая шапка: смена навигации" # делаем коммит (работа над «шапкой» завершена)
git checkout master # переключаемся в ветку master
git merge new_page_header # вливаем в master изменения из ветки new_page_header
git branch -d new_page_header # удаляем ветку new_page_header

Работа с ветками, конфликт слияния

Есть master (публичная версия сайта), в двух параллельных ветках (branch_1 и branch_2) было отредактировано одно и то же место одного и того же файла, первую ветку (branch_1) влили в master, попытка влить вторую вызывает конфликт.

# указана последовательность действий:
git checkout master # переключаемся на ветку master
git checkout -b branch_1 # создаём ветку branch_1, основанную на ветке master
subl . # редактируем и сохраняем файлы
git commit -a -m "Правка 1" # коммитим (теперь имеем 1 коммит в ветке branch_1)
git checkout master # возвращаемся к ветке master
git checkout -b branch_2 # создаём ветку branch_2, основанную на ветке master
subl . # редактируем и сохраняем файлы
git commit -a -m "Правка 2" # коммитим (теперь имеем 1 коммит в ветке branch_2)
git checkout master # возвращаемся к ветке master
git merge branch_1 # вливаем изменения из ветки branch_1 в текущую ветку (master), удача (автослияние)
git merge branch_2 #  вливаем изменения из ветки branch_2 в текущую ветку (master), КОНФЛИКТ автослияния
# Automatic merge failed; fix conflicts and then commit the result.
subl . # выбираем в конфликтных файлах те участки, которые нужно оставить, сохраняем
git commit -a -m "Устранение конфликта" # коммитим результат устранения конфликта

Синхронизация репозитория-форка с мастер-репозиторием

Есть некий репозиторий на github.com, он него нами был сделан форк, добавлены какие-то изменения. Оригинальный (мастер-) репозиторий был как-то обновлён. Задача: стянуть с мастер-репозитория изменения (которые там внесены уже после того, как мы его форкнули).

# указана последовательность действий:
git remote add upstream git@github.com:address.git # добавляем удаленный репозиторий: сокр. имя — upstream, URL мастер-репозитория
git fetch upstream # качаем все ветки мастер-репозитория, но пока не сливаем со своими
git checkout master # переключаемся на ветку master своего репозитория
git merge upstream/master # вливаем ветку master удалённого репозитория upstream в свою ветку master

Ошибка в работе: закоммитили в мастер, но поняли, что нужно было коммитить в новую ветку (ВАЖНО: это сработает только если коммит еще не отправлен в удалённый репозиторий)

# указана последовательность действий:
# сделали изменения, проиндексировали их, закоммитили в master, но ЕЩЁ НЕ ОТПРАВИЛИ (не делали git push)
git checkout -b new-branch # создаём новую вертку из master
git checkout master # переключаемся на master
git reset HEAD~ --hard # жОско сбрасываем состояние master
git checkout new-branch # переключаемся обратно на новую ветку

Нужно вернуть содержимое файла к состоянию, бывшему в каком-либо коммите (известна SHA коммита)

# указана последовательность действий:
git checkout f26ed88 -- index.html # указана SHA коммита, к состоянию которого нужно вернуть файл и имя файла
git status # изменения внесены в файл, файл сразу проиндексирован
git diff --staged # показать изменения в файле
git commit -am "Navigation fixs" # коммит

При любом действии с github (или другим удалённым сервисом) запрашивается логин/пароль

Речь именно о запросе пароля, а не ключевой фразы.

# указана последовательность действий:
git remote -v # показать список удалённых репозиториев с адресами (у проблемного будет адрес по https), предположим, это origin
git remote add origin git@github.com:address.git # добавляем удаленный репозиторий, сокр. имя — origin
# если возникает ошибка добавления с сообщением о том, что origin «уже задан», то: 
git remote rm origin # удаляем привязанный удалённый репозиторий
git remote add origin git@github.com:address.git # добавляем удаленный репозиторий, сокр. имя — origin

Понравилась статья? Поделить с друзьями:
  • Как удалить локальный профиль в windows 10
  • Как удалить локальный порт принтера windows 10
  • Как удалить локальный диск с компьютера windows 7
  • Как удалить локальный аккаунт в windows 10
  • Как удалить локальную учетную запись на windows 10 на ноутбуке