Как мне зафиксировать только некоторые файлы?

У меня есть два проекта. Один из них является "официальным" проектом, а второй - легкой модификацией (некоторые файлы добавлены). Я создал новую ветку и положил в них новые файлы. Но в процессе разработки некоторые файлы, общие для обеих веток, изменяются.

Как мне зафиксировать только эти файлы?

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 в правильной ветке и зафиксировав.

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

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