Repository navigation
Repository.mergeBranches creates dirty index after a non-conflicting merge #1217
Description
Activity
Unfortunately i'm having the exact same problem.
The code below produces a merge and a commit with message "Merged master into dev".
But then when i'm doing agit statusi'm getting :On branch dev Your branch is ahead of 'origin/dev' by 156 commits. (use "git push" to publish your local commits) Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: .gitignore modified: license.txt modified: readme.html modified: wp-activate.php modified: wp-admin/about.php modified: wp-admin/admin-ajax.php .....
which is odd since the merge produced earlier has the files committed.
I'm using the code below to fetch origin and merge the two branches.
NodeGit.Repository.open(path).then(function(repoResult) { repo = repoResult; }) .then(function() { repo.fetch('origin', { callbacks: { credentials: function(url, userName) { return NodeGit.Cred.sshKeyMemoryNew(userName, publickey, privatekey, ''); } } }) }) .then(function() { return repo.mergeBranches('dev', 'master'); }) .catch(function(err) { console.log(err); });
@raqqun I suppose you could try working around the problem by switching your
HEADto point elsewhere and/or by performing a hard reset after the merge.I am having this same problem; if I merge a branch into master, the merge works (the commit is there, and it is appropriate). After the merge, git status shows that I have uncommitted (but staged) changes; these changes would undo the previous commit. The problem with a hard reset after the merge is that it might clobber other staged (but uncommitted) changes. I need to play around with git itself to see what it does in this situation.
I'll try moving HEAD around and see what that does.
This is snippets of the code that's exhibiting this behavior (with the reset in there). Unfortunately, this clobbers my staged and/or unstaged changes from already tracked files.
https://gist.github.com/neloe/cb486f73d73a34f7e890d7c827483c54Seeing the same issue with nodegit v0.19.0 and git v2.6.2
Steps to reproduce:
- Checkout a branch
- Edit a file
- Refresh Index
- Add all to the index
- Create a commit
- Push commit to remote
- Checkout other branch
- Merge first branch into other branch
- Push to remote.
Expected:
git status should show that I have a clean index and no staged changes.Actual:
git status reads that I have staged changes which would negate the ones I just committed.I had a similar issue. What worked for me was using the example from https://github.com/nodegit/nodegit/blob/master/examples/add-and-commit.js
which adds a couple of steps between writeTree and createCommit:.then(function() { return index.writeTree(); }) .then(function(oidResult) { oid = oidResult; return nodegit.Reference.nameToId(repo, "HEAD"); }) .then(function(head) { return repo.getCommit(head); }) .then(function(parent) { return repository.createCommit("HEAD", git.Signature.default(repository), git.Signature.default(repository), "right", oid, [ parent ]); })
I had a similar issue. In my case the issue was that I fetched
refs/heads/master:refs/heads/masterinstead ofrefs/heads/master:refs/remotes/origin/master.
cd merge-commit-buggit statusAll the tests in
merge.jsmerges two random branches so the bug doesn't appear. The bug will only surfaces if you mergeHEADwith another branch.