Ответ 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