Как мне зафиксировать только некоторые файлы?
У меня есть два проекта. Один из них является "официальным" проектом, а второй - легкой модификацией (некоторые файлы добавлены). Я создал новую ветку и положил в них новые файлы. Но в процессе разработки некоторые файлы, общие для обеих веток, изменяются.
Как мне зафиксировать только эти файлы?
8 ответов
Я предполагаю, что вы хотите зафиксировать изменения в одной ветви, а затем сделать эти изменения видимыми в другой ветви. В git у вас не должно быть изменений поверх HEAD при смене веток.
Вы фиксируете только измененные файлы:
git commit [some files]
Или, если вы уверены, что у вас есть чистая площадка, вы можете
git add [some files] # add [some files] to staging area
git add [some more files] # add [some more files] to staging area
git commit # commit [some files] and [some more files]
Если вы хотите сделать этот коммит доступным в обеих ветках, вы делаете
git stash # remove all changes from HEAD and save them somewhere else
git checkout <other-project> # change branches
git cherry-pick <commit-id> # pick a commit from ANY branch and apply it to the current
git checkout <first-project> # change to the other branch
git stash pop # restore all changes again
Получить список файлов, которые вы хотите зафиксировать
$ git status
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: file1
modified: file2
modified: file3
modified: file4
Добавить файлы в постановку
$ git add file1 file2
Проверьте, что вы делаете
$ git status
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: file1
modified: file2
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: file3
modified: file4
Зафиксируйте файлы сообщением
$ git commit -m "Fixed files 1 and 2"
Если вы случайно зафиксируете неправильные файлы
$ git reset --soft HEAD~1
Если вы хотите разархивировать файлы и начать заново
$ git reset
Unstaged changes after reset:
M file1
M file2
M file3
M file4
Вы можете зафиксировать некоторые обновленные файлы, например так:
git commit file1 file2 file5 -m "commit message"
Предположим, вы внесли изменения в несколько файлов, например: Файл1 Файл2 Файл3 Файл4 Файл5
Но вы хотите зафиксировать только изменения File1 и File3.
Есть два способа сделать это: 1> Поместить только эти два файла, используя: git add file1 file2
затем выполните git commit -m "ваше сообщение"
затем нажмите Git Push
2> Прямая фиксация
git commit file1 file3 -m "мое сообщение"
затем нажми
На самом деле первый способ полезен в том случае, если мы регулярно изменяем файлы и размещаем их -> Большие проекты, обычно живые проекты. Но если мы изменяем файлы, а не размещаем их, тогда мы можем сделать прямой коммит -> Небольшие проекты
Часть этого кажется "неполной"
Группы людей НЕ будут знать, должны ли они использовать кавычки и т.д..
Добавьте 1 конкретный файл с указанием пути расположения, а также
git add JobManager/Controllers/APIs/ProfileApiController.cs
совершить
git commit -m "your message"
Нажмите для удаленного репо
git push
Другие ответы показывают тайник и т. Д., Которые вы иногда захотите сделать
Если вы уже создали файлы, просто удалите их:
git reset HEAD [file-name-A.ext] [file-name-B.ext]
Затем добавьте их снова и снова.
Я думаю, вы также можете использовать командную строку:
git add -p
Это позволяет вам просматривать все ваши незафиксированные файлы один за другим и выбирать, хотите вы их зафиксировать или нет.
Затем у вас есть несколько вариантов, которые будут появляться для каждой модификации: я использую «y» для «да, я хочу добавить этот файл» и «n» для «нет, я сделаю это позже».
Stage this hunk [y,n,q,a,d,K,g,/,e,?]?
Что касается других вариантов (q, a, d, K, g, /, e ,?), я не уверен, что они делают, но я предполагаю, что "?" может помочь вам, если вам нужно углубиться в детали.
Самое замечательное в этом то, что вы можете продвигать свою работу и после этого создавать новую ветку, и вся незавершенная работа будет следовать за вами в этой новой ветке. Очень полезно, если вы написали много разных кодов и действительно хотите реорганизовать свою работу на github, прежде чем нажимать на нее.
Надеюсь, это поможет, я не видел, чтобы об этом говорилось ранее (если это было упомянуто, мое плохое)
Это простой подход, если у вас мало изменений в коде:
1. git stash
2. git stash apply
3. remove the files/code you don't want to commit
4. commit the remaining files/code you do want
Затем, если вы хотите, чтобы код, который вы удалили (биты, которые вы не фиксировали), в отдельной фиксации или другой ветке, тогда, все еще находясь в этой ветке, выполните:
5. git stash apply
6. git stash
На шаге 5, когда вы уже применили тайник и зафиксировали код, который вам нужен на этапе 4, diff и не отслеживаемый во вновь примененном тайнике - это просто код, который вы удалили на шаге 3 перед тем, как зафиксировали на шаге 4.
Таким образом, шаг 6 - это тайник кода, который вы не [хотели] фиксировать, поскольку вы, вероятно, действительно не хотите терять эти изменения, верно? Таким образом, новый тайник из шага 6 теперь можно привязать к этой или любой другой ветке, выполнив git stash apply в правильной ветке и зафиксировав.
Очевидно, это предполагает, что вы выполняете шаги в одном потоке, если вы используете тайник в любой другой точке на этих этапах, вам нужно будет отметить ссылку тайника для каждого шага выше (а не просто базовый тайник и применить самый последний тайник).