master
使用 Rugged,我从(我们称之为)创建一个新分支new_branch
,修改一个文件并为此创建一个提交。现在我想将此分支合并到master
,将 master 推送到远程并删除new_branch
。
在运行下面的代码时,在任何一个分支上都没有修改过的文件,也没有暂存的文件,因为修改后的文件被提交到new_branch
.
这是我使用的代码:
from_branch = @repo.head.name
their_commit = @repo.branches[into_branch].target_id
our_commit = @repo.branches[from_branch].target_id
index = @repo.merge_commits(our_commit, their_commit)
if index.conflicts?
# conflicts. deal with them
else
# no conflicts
commit_tree = index.write_tree(@repo)
@repo.checkout(into_branch)
commit_author = { email: GIT_EMAIL, name: GIT_NAME, time: Time.now }
Rugged::Commit.create(@repo,
committer: commit_author,
message: "Merge #{from_branch} into #{into_branch}",
parents: [@repo.head.target, our_commit],
tree: commit_tree,
update_ref: @repo.branches[into_branch].canonical_name)
@repo.push('origin', [@repo.head.name], { credentials: @cred })
@repo.branches.delete(from_branch)
end
这按预期工作(修改后的文件被合并到master
,它被推送到远程并且新分支被删除),但是一旦完成,我留下的修改后的文件显示master
为已修改和暂存,准备好提交,而应该有'不是工作目录中的任何修改文件,也没有上演。一切都应该是最新的。