I'm usually writing code on two machines: the Intel NUC running Arch
Linux at the office and the Windows 8.1 HP Ultrabook at home (the
Microsoft Office package keeps me on Windows. I tried Evolution with the
Exchange plugin a few days ago on my Arch Linux and it was stalling the
machine with my 5GB of mail and I had to cold reboot a few times a day).
Good thing PyCharm allows me to use my license on multiple machines.
I have a personal repository on our Gitlab server and I use it to copy
code from one machine to another:
- I'm amending the last commit and push it to server from the machine
I've last used:
git add . git commit --amend --no-edit git pus
- On the second machine I usually just pull:
This might cause a merge conflict if I happen to have some small and
unimportant changes on the second machine. This will always cause
a conflict when you're actually overwriting the local history. If I am
sure that I can dump the changes on the local machine I can force the
pull to overwrote local changes:
# cancel the current merge that was initiated by git pull:
git reset --hard HEAD
# not normally needed since git pull already fetched:
git fetch --all
# use remote code and overwrite local code:
git reset --hard origin
And this little article should save me the googling I do each time I
do a git pull. :)
So you forked the project's repo to your own personal remote repo (in
Gitlab/Github/etc.) and you committed your changes to personal/master
and now you're trying to merge your commits to upstream/master.
(Good idea to work in a branch, and not on master, by the way :)
You'll have a problem because both branches, from the personal and the
upstream repos, are called master.
I gave up doing this when working with a single local git directory that
has the origin/master branch tracking the personal remote repo and
upstream/master branch tracking the main repo because would involve some
non-straight forward configs that look hard to debug/maintain.
Another option is to do the merge in another directory. You'd have a
separate local repo (besides the personal development repo) that is
cloned from the upstream:
git clone git@gitserver:<<theproject>>/<<theproject>>.git .
# add your personal (development) remote repository
git remote add <<adrian>> git@gitserver:<<adrian>>/<<theproject>>.git .
# create a local branch named <<adrian>>-master (avoiding the master name collision!) tracking <<adrian>>/master
git fetch <<adrian>> git checkout -b <<adrian>>-master <<adrian>>/master
# make sure you're on origin/master (main/upstream project)
git checkout master
# and merge your commits into main project
git merge <<adrian>>-master --ff-only
# send the commits to main project remote server
- I'm using Gitlab 7.0, but that should matter (it uses the git ssh
user for key based authentication). I'm doing the merge from command
line because I want to have fast-forward merges (without an extra
commit for the merge - this is how the pull request merge works in
the Gitlab web interface). Also, my pull request web page is
crashing right now, but that's another
<<adrian>> with your personal repo name
- same with
gitserver is obviously your own git server hostname