如何在单独的合并请求中推送每个文件更改

How to push every single file change in separate merge request

我有几个文件:

tasks/foo1
config/foo2
foos/foo3

我对其中的每一个都进行了更改,并且我有两个提交,每个提交都对所有这些进行了更改。我如何为他们制作单独的先生?我的意思是 1 个先生 -> 1 个文件已更改

MR 仅包含提交。为了实现这一点,您至少需要每次提交只包含对一个文件的更改。对于您描述的场景,您将不得不撤消(重置)编辑这三个文件的两次提交,然后 re-perform 添加文件的提交一一更改。这是历史改写。

假设您当前在编辑的分支上,其中有两个提交编辑了三个文件。您可以创建 3 个新分支(每个文件将从中创建 3 个新 MR)并相应地重写历史记录:

git branch edit-file1
git branch edit-file2
git branch edit-file3

# checkout the branch where HEAD contains your two commits
git checkout edit-file1

# reset the two commits, unstaging changes to 3 files
git reset HEAD~2

# add and commit just 1 file
git add path/to/file1 
git commit -m "edited file 1"

# push new branch and make MR
git push -u origin edit-file1 -o merge_request.create 

# do the same thing for file 2
git checkout edit-file2
git reset HEAD~2
git add path/to/file2
git commit -m "edited file 2"
git push -u origin edit-file2 -o merge_request.create

# and for file 3
git checkout edit-file3
git reset HEAD~2
git add path/to/file3
git commit -m "edited file 3"
git push -u origin edit-file3 -o merge_request.create

不过,如果您从不进行前两次提交,而最初只是一个接一个地添加和提交文件,这可能会更容易。

看你是想串联还是并联三个变化,

git reset --soft @~2     # back up over the last two commits
git commit -o tasks/foo1    # make three commits in series, adding one file each time
git commit -o config/foo2
git commit -o foos/foo3

git reset --soft @~2
git commit -o tasks/foo1;  git branch foo1merge
git reset --soft @~
git commit -o config/foo2; git branch foo2merge
git reset --soft @~
git commit -o foos/foo3;   git branch foo3merge

这将为三个更改的文件中的每一个提供一个可合并的分支。