Как добавить файл в ветку git
Перейти к содержимому

Как добавить файл в ветку git

  • автор:

Как добавить файлы в новую ветку уже созданного репозитория?

Мне нужно добавить файлы в ветку созданную мной, не master. Я не понимаю как это сделать. Вот, что я делаю:
git init
git add .
git commit -m «adding files»
git remote add origin https://github.com/s1veme/hotelOrder.git
git push -u origin backend

! [rejected] backend -> backend (fetch first) error: failed to push some refs to 'https://github.com/s1veme/hotelOrder.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull . ') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Как мне добавить файлы в ветку backend в моем репозитории?

  • Вопрос задан более двух лет назад
  • 1239 просмотров

запушить в новую ветку определенные файлы

Есть репозиторий test с веткой master. В нем файлы 1.txt 2.txt Создаю новую ветку и перехожу в нее git checkout -b newBranch. Далее создаю файл 3.txt Вопрос. Как запушить в новую ветку только файл 3.txt Если делаю git add 3.txt в конечном итоге в ветке newBranch имею все 3 файла, в то время как в master только начальные

Отслеживать
задан 29 сен 2019 в 18:14
maksym6666 maksym6666
3 2 2 бронзовых знака

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Запушится и так только 3.txt. Два других файла уже имеются в новой ветке с самого ее создания. Каждая новая ветка является точной копией той, из которой она создается.

  1. Удалить файлы 1.txt и 2.txt в новой ветке.
  2. Создавать новую ветку до коммита тех двух файлов в исходную.

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

Как скопировать файл из другой Git ветки

Иногда требуется скопировать файл из одной ветки или из другого коммита. Зачем? Ну например обновили конфиг и надо у себя в ветке тоже его использовать без слияний и прочих лишних действий.

Кратко #

git checkout 

Как это работает #

Если хотите повторить все действия, сделайте простой репозиторий с двумя ветками и в ветке second будет файл в директории. Порядок команд для этого:

git init -b master&& \  echo "this is txt file" > main.txt && \  git add main.txt && \  git commit -m "Initial commit" && \  git checkout -b second && \  mkdir myDir && \  echo "must be copied" > myDir/second.txt && \  git add myDir/second.txt && \  git commit -m "added second.txt" 

Вы можете скопировать и выполнить все команды за один раз.

Допустим, нам требуется скопировать файл myDir/second.txt из ветки second в master . Для копирования файла, перейдите в ветку, в которую хотите скопировать файл или директорию из другой ветки.

git checkout master 

После можно выполнить команду копирования:

git checkout second ./myDir/second.txt 

После этого из ветки second будет скопирован файл, при этом сохранится путь до файла. То есть в master будет лежать файл в папке mydDir .

Если файл уже есть в текущей ветке — он будет перезаписан!

Давайте посмотрим и убедимся — файл у нас скопировался:

git status  On branch master Changes to be committed:  (use "git restore --staged . " to unstage)  new file: myDir/second.txt 

При этом, файл уже подготовлен к коммиту.

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

А что еще есть? #

А если мы хотим скопировать файл по другому пути? Так тоже можно, для этого можно использовать другую команду git show .

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

И давайте перейдем в master и создадим папку config и в нее позже скопируем файл second.txt .

git checkout master mkdir config 

И самое время выполнить команду вида:

git show : > 

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

Это немного хак, так как команда show «показывает» файл из другой ветки. А мы этот вывод пишем в новый файл у себя, для этого и указываем вывод через >

В нашем случае будет так:

git show second:myDir/second.txt > config/config.txt 

Убедимся что файл скопирован:

git status -uall  On branch master Untracked files:  (use "git add . " to include in what will be committed)  config/config.txt  nothing added to commit but untracked files present (use "git add" to track) 

-uall нам покажет файлы в новых директориях, без этого параметра не увидим содержимое config

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

Git + GitHub tutorial. Основы работы с GitHub на mac ��

В статье подробно рассматривается как создать удалённый репозиторий на GitHub и как работать с GitHub локально, синхронизируя все изменения.

10 min read
Jun 11, 2019

Статья обновлена и дополнена ��

☝�� Этот материал подойдёт тем, кто уже знает, зачем нужны Git и GitHub, но ещё не пользовался ими.

Всего за 15–20 минут (время прочтения и повторения описанных действий) вы научитесь:

  • ✅ работать с Git в Терминале на macOS
  • ✅ создавать удалённые репозитории на GitHub
  • ✅ и главное — связывать локальные репозитории с удалёнными

Я собрал этот материал из нескольких курсов и гайдов для разных git-сервисов. Выбрал лучшее, убрал лишнее и адаптировал его для GitHub и mac. Так что вы получите максимум пользы, за минимум времени.

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

Подготовка к работе ��

Для работы потребуются:

  • аккаунт на GitHub
  • Терминал (предустановлен на macOS)
  • Git — можно установить отсюда

☝�� Для систем Git есть различные графические клиенты. У GitHub есть свой. Позже, вы сможете выбрать и использовать один из них, но в этой инструкции, для лучшего погружения и практики, используется Терминал.

Настройка Git

Если вы ещё не пользовались Git, то для начала необходимо зарегистрироваться как пользователь системы — добавить в систему Имя пользователя и e-mail. Запустите Терминал, и выполните поочерёдно две команды (имя и имейл вписываются без скобок):

git config --global user.name 
git config --global user.email

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

git config user.name
git config user.email

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

Создание удалённого репозитория

Удалённый репозиторий на GitHub — это облако, в котором хранятся файлы проекта и история их изменений. Локально же — это просто папка проекта на компе.

Репозитории на GitHub используются для самых разных целей:

  • расшаривания кода и другой информации (например, список интересного в телеграм)
  • совместной разработки, обсуждения и ведения проектов (не только связанных с кодом, например, карта навыков и развития тим-лида)
  • и даже для ведения тасок (во встроенном таск-треккере)

При этом, работа непосредственно с кодом и файлами, ведётся локально — в папках проектов на компе. Для этого, папки связываются с удалёнными репозиториями.

Порядок действий такой:

  • создаётся проект на github.com
  • клонируется на комп

☝�� Можно делать и наоборот, но приведённая последовательность больше подходит для новичков.

Для каждого проекта лучше создавать отдельный репозиторий на Github. Ниже описано создание удалённого репозитория и локальной папки для тестового проекта hello-world, и их синхронизация.

Создание и настройка

Новый репозиторий на GitHub можно создать, нажав в правом верхнем углу на + и выбрав New repository в выпадающем меню:

Откроется страница настройки нового репозитория (скрин ниже), на которой:

  • вводится имя репозитория
  • добавляется краткое описание проекта (не обязательно)
  • выбирается тип репозитория

☝�� На GitHub есть два типа репозиториев — Public (будет виден всем, на странице вашего аккаунта, и все смогут писать коммиты), Private (будет виден только вам и тем, кому вы предоставите доступ в настройках репозитория).

  • добавляется файл README (чекбокс Initialize this repository with a README)

☝�� Для Public репозиториев принято добавлять файл README с описанием проекта. В файл добавится описание из поля Description. А вся информация из этого файла будет отображаться на странице проекта.

  • при необходимости можно добавить файл .gitignore (это уже для проектов посложнее, и в рамках этого материала не рассматривается)
  • при необходимости, добавляются лицензии (например, на используемые шрифты)

После такой элементарной настройки, уже можно создать репозиторий ⟶ зелёная кнопка Create repository.

Страница репозитория

На открывшейся странице созданного репозитория, всё что нам нужно по проекту, находится на вкладке Code. Тут же выводится содержание файла README.

На момент создания, у проекта есть один файл README.md, один commit (запись о факте создания репозитория) и одна ветка (главная ветка master).

☝�� Для работы продакта, или аналитика, зачастую, достаточно основной ветки master. Дополнительные ветки создаются для сложных проектов, или для совместной работы. Использование дополнительных веток будет рассмотрено в отдельном материале. Не забудьте нажать Follow.

Рабочая папка для проектов

Скорее всего, у вас уже есть папка для проектов. Если ещё нет, то создайте. Далее, необходимо будет перейти в неё в Терминале (описано ниже).

☝�� Папку самого проекта создавать не нужно, она клонируется из GitHub.

На начальном этапе, работать с файлами и папками привычнее в Finder. Быстро перейти сразу в папку для проектов (после её создания) в Терминале, можно прямо из Finder, правым кликом по папке для проектов ⟶ Службы ⟶ Новая вкладка Терминала по адресу папки.

Откроется вкладка Терминала с нужным нам адресом.

Клонирование удалённого репозитория

Чтобы работать с проектом локально, и при этом, все изменения синхронизировать с удалённым репозиторием, необходимо клонировать GitHub-проект.

Для этого на странице проекта на GitHub необходимо нажать кнопку Clone or download и скопировать адрес репозитория.

Далее, в Терминале (в той вкладке, которая открылась из Finder) выполняется команда (используя скопированный URL без скобок):

git clone

По завершению отработки команды, Терминал выдаст done — папка проекта, которую мы клонировали с GitHub появилась в папке для проектов на компе. Теперь можно работать с проектом локально — создавать файлы, редактировать их и все изменения синхронизировать с удалённым репозиторием.

�� TLDR

Чтобы связать новый проект на GitHub с папкой проекта на компе, надо:

  • создать проект на GitHub (новый репозиторий) и скопировать его УРЛ
  • перейти в Терминале в общую папку для проектов (папку самого проекта создавать не надо)
  • клонировать проект с GitHub — git clone (URL без скобок)

☝�� Таким способом можно скопировать любой проект с Гитхаба себе на комп

Синхронизация локальных изменений с удалённым репозиторием на GitHub

Изменения в проекте

Для демонстрации синхронизации я сделаю два изменения:

  • скорректирую файл README
  • добавлю картинку в папку проекта

Повторите эти действия, для наработки навыка использования Git.

В файл README.md добавлена строка “My furst commit”. Сделана опечатка, которая будет исправлена позже, когда будет рассматриваться изменение файлов в репозитории GitHub.

В папку проекта добавлена картинка project-page.png (один из скриншотов из этого поста).

Git flow

Чтобы локальные изменения (в данном примере — обновление файла и добавление картинки) синхронизировались с удалённым репозиторием, необходимо их сначала добавить, потом закоммитить, а потом запушить.

Основные действия — это коммит и пуш. А git add — всего лишь служебная команда для регистрации/добавления изменений.

☝�� Commit — это точка сохранения проекта, в которую можно будет вернуться, если что-то пойдёт не так (как сохранение в игре). Эти сохранения и синхронизируются между локальным и удалённым репозиториями.

Push — это внесение закоммиченых локальных изменений в проект на удалённом репозитории.

Подробно о каждом действии — далее.

Информационная команда git status

Все манипуляции с проектом делаются в папке проекта. Для этого, необходимо открыть её в Терминале. Можно использовать приведённый выше способ (правый клик по папке в Finder). Или, если в Терминале уже открыта папка для проектов, можно переместиться в папку проекта командой (имя папки проекта вписывается без скобок):

Команды git add и git commit

В Терминале перейдём в папку проекта (все изменения с проектом делаются в папке проекта). Для отслеживания изменений используется команда:

git status

�� Все используемые git и github команды с их описанием будут приведены в отдельном блоке в конце материала.

Для отслеживания изменений в проекте используется команда:

git status

☝�� git status можно не использовать, но хорошо знать, что такая возможность есть, и можно в любой момент посмотреть информацию о состоянии проекта.

Результат работы команды — вывод информации о проекте. Незарегистрированные изменения выделены красным. Структура информации следующая:

  • On branch master — указана текущая ветка

☝�� Это будет полезно при работе с несколькими ветками.

  • Changes not staged for commit — есть незарегистрированные изменения (modified: README.md)
  • Untracked files — есть новые файлы (project-page.png)
  • no changes added to commit — в данный момент нечего коммитить

Тут же, в круглых скобках git сам даёт подсказки, что можно делать дальше: use git add …

git add (добавить)

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

git add

Следующая команда регистрирует (добавляет) сразу все изменения. В небольших проектах можно всегда использовать её, т.к. это проще и быстрее:

git add .

Чтобы убедиться, что все изменения добавлены, можно снова выполнить git status (это не обязательно).

git commit (закоммитить)

Для создания коммита, и добавления к нему комментария используется расширенная команда (комментарий пишется как в примере — в кавычках):

git commit -m "Change README, and add screenshot"

☝�� Коммиты, обычно, делаются после какого то блока изменений — добавлен/переписан блок кода, или новый блок информации. Коммиты хорошо сопровождать описанием о проделанных изменениях.

Теперь git status показывает, что изменений больше нет. И что есть один коммит, не добавленный в ветку.

git push (запушить)

Чтобы запушить локальные изменения на удалённый репозиторий, используется команда git push . Или её расширенный вариант, с указанием ветки, куда пушатся изменения:

git push origin master

☝�� При первом использовании git push , Git запросит логин и пароль от аккаунта на GitHub. При вводе пароля, никакие символы не появляются и курсор не сдвигается — это нормально, просто введите полностью и нажмите энтер. Если пароль введён без ошибок — всё сработает.

В git status , теперь будет информация, что никаких новых изменений нет (nothing to commit), и коммитить нечего.

Теперь проект на Гитхабе актуальный — тут отобразились все изменения, которые были сделаны локально: добавился один commit, добавился файл, изменился README.

�� TLDR

Чтобы после изменения проекта, отправить локальные правки на удалённый репозиторий, надо:

  • перейти в Терминале в папку самого проекта
  • зарегистрировать изменения — git add .
  • создать коммит — git commit -m «Комментарий»
  • запушить коммит на GitHub — git push origin master

☝�� Для отслеживания статуса изменений в проекте используется команда git status

Обновление локального репозитория, после изменений проекта на GitHub

Бывает так, что файлы проекта правятся прямо на сайте GitHub. Или кто-то из участников проекта запушил новые изменения. В обоих случаях, необходимо получить эти изменения и обновить локальный репозиторий.

Редактирование файлов проекта на сайте удалённого репозитория

Для демонстрации синхронизации я изменю файл README на github.com.

☝�� Все изменения в удалённом репозитории являются коммитами. Т.е. при сохранении изменений файла, сразу добавляется коммит в проекте на GitHub.

Для редактирования файлов на сайте GitHub используется встроенный редактор. Порядок действий такой:

  1. Вносятся изменения в файле;
  2. Добавляется описание коммита;
  3. Сохраняется коммит.

После сохранения, коммит добавляется в проект и сразу примеряются все изменения.

На Гитхабе хранится история всех коммитов и подробная информация по ним. Если зайти в любой коммит, можно посмотреть какие правки были сделаны. Удалённые строки подсвечиваются красным, добавленные — зелёным.

Обновление локального репозитория

Для обновления локального репозитория, после любых изменений проекта на Гитхабе, в Терминале (надо находится в папке проекта) используется команда:

git pull

В результате выполнения команды, в Терминале отображаются изменения, которые мы забираем с удалённого репозитория. По завершению работы команды git pull , все файлы проекта на компе обновляются до состояния удалённого репозитория. Можно убедиться в этом, проверив файл REAMDE в локальной папке проекта.

�� TLDR

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

  • в Терминале, находясь в папке проекта выполнить git push

�� Список команд для работы в Терминале с Git и GitHub

Настройка Git

  • git config —global user.name (Имя без скобок) — добавление имени пользователя
  • git config —global user.email (имейл без скобок) — добавление имейла пользователя
  • git config user.name — проверка имени пользователя
  • git config user.email — проверка имейла пользователя

Работа с репозиториями

  • git clone (URL без скобок) — клонирование удалённого репозитория
  • git status — посмотреть статус проекта
  • git add (имя файла без скобок) — добавление конкретного файла в будущий коммит
  • git add . — добавление всех файлов в будущий коммит
  • git commit -m «описание коммита» — создание коммита с описанием
  • git push origin master — запушить коммиты в ветку master
  • git pull — актуализировать проект на компе из удалённого репозитория

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *