Подтвердить что ты не робот

Git запрос на перенос только для одного файла

Я сделал несколько изменений в двух файлах в репозитории Git (в частности, добавил две формулы к brew).

Я совершил изменения индивидуально:

git commit file1
git commit file2

Затем я нажал на GitHub:

git push [email protected]:myname/homebrew.git

Теперь я хотел бы отправить два запроса на вывод в восходящий репозиторий, один для файла1, один для файла2. Возможно ли это?

4b9b3361

Ответ 1

Если вы изменили оба файла в одном и том же коммите, то нет, это невозможно. Толкает и тянет работает на уровне фиксации; они не разлучат их.

Если вы еще не поделились изменениями, вы можете разделить фиксацию на две части, создав ветвь для каждого, а затем инициировать запросы на перенос для них.

Это одна из тех вещей, которые есть много способов сделать, но, например, вы могли бы сделать что-то вроде этого:

# make sure the commit in question is the most recent
# make branch to point to the previous commit, leaving the changes in your work tree
git reset HEAD^
# commit the changes to the first file
git add file1
git commit
# make a branch for the first commit
git branch first-branch HEAD^
# commit the changes to the second file
git add file2
git commit
# create and check out a branch for this commit
git checkout -b second-branch
# rebase the branch back, so that it doesn't include the first commit
git rebase --onto HEAD^^ HEAD^ second-branch

# point your master branch somewhere that makes sense - maybe before either branch
git checkout master
git reset --hard first-branch^

Это оставило бы вас с такой историей:

- x (master) - A (first-branch)
   \
    - B (second-branch)

где зафиксировать измененный файл1 и зафиксировать B измененный файл2.

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

git push origin first-branch second-branch

Ответ 2

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

Ответ 3

Вы можете получить всю ревизию (фактически, всю ветвь, ведущую к ревизии), но затем вы можете получить доступ к отдельным файлам из вашего репозитория:

git checkout <rev> -- <file>