Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5d0c64d

Browse files
committed
rest of draft for rebase documentation.
1 parent 41e4c82 commit 5d0c64d

File tree

1 file changed

+139
-19
lines changed

1 file changed

+139
-19
lines changed

doc/devel/coding_guide.rst

Lines changed: 139 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -166,29 +166,149 @@ C/C++ extensions
166166
Rebase a Pull Request
167167
----------------------
168168

169-
When working on PR it is possible for other changes to get merged into
170-
the parent branch that conflict with your branch. The conflict can be
171-
trivial, for example both the parent branch and you branch add an
172-
entry to the top of `CHANGELOG`. Git can not unambiguously tell what
173-
to with both changes (should one go above the other? if so, which
174-
order? should it try to merge them?) so it gives up and declare the
175-
branches can not be merged cleanly. If you were the branches at the
176-
command line you could do an interactive merge where git pauses half
177-
way through to give you a chance to resolve the conflicts by hand,
178-
however using github almost all of the merges back into the parent
179-
branches are done via the web-interface, so only PRs which will
180-
cleanly merged will be accepted. If this happens to your PR, one of
181-
the developers will ask you to 'rebase' your branch which is the
182-
process by which you resolve the conflicts between your branch and
183-
the parent branch.
169+
When working on a PR it is possible for other changes to get merged
170+
into the parent branch that conflict with changes on your branch. The
171+
conflicts can be trivial, for example both the parent branch and your
172+
branch add an entry to the top of `CHANGELOG`. Git can not
173+
unambiguously tell what to with both changes (should one go above the
174+
other? if so, which order? should it try to merge them?) so it gives
175+
up and declare the branches can not be merged cleanly. If you were
176+
the branches at the command line you could do an interactive merge
177+
where git pauses half way through to give you a chance to resolve the
178+
conflicts by hand, however using github almost all of the merges back
179+
into the parent branches are done via the web-interface, so only PRs
180+
which will cleanly merged will be accepted. If this happens to your
181+
PR, one of the developers will ask you to 'rebase' your branch which
182+
is the process by which you resolve the conflicts between your branch
183+
and the parent branch.
184184

185185
In git rebasing is a mild form of re-writing history, as it
186186
effectively transplants where your branch from where you intially
187187
forked of off the parent branch to some other point. For a much more
188-
detailed explanation (with pictures!) see
189-
http://git-scm.com/book/en/Git-Branching-Rebasing. In general,
190-
re-writing history (particularly published history) is considered very
191-
bad, but in this case is very useful.
188+
detailed explanation (with pictures!) see `this nice write up
189+
<http://git-scm.com/book/en/Git-Branching-Rebasing>`. In general,
190+
re-writing history, particularly published history, is considered
191+
bad form, but in this case it is very useful.
192+
193+
The following example assumes that the remote of _your_ github
194+
repository is called `github` and the remote of the official
195+
repository is called `upstream`.
196+
197+
The first step is to make sure that your local copy of the upstream repository is
198+
up-to-date::
199+
200+
$ git fetch upstream
201+
202+
which updates your local copy of the repository, but does not change any files
203+
in your working copy. Next, switch to the branch that you want to rebase::
204+
205+
$ git checkout backend_plt_refactor
206+
207+
You are now ready to start the rebase of your branch onto the target
208+
parent branch, in this case `upstream/master` ::
209+
210+
$ git rebase upstream/master
211+
212+
and git will then give a bunch of feed back::
213+
214+
First, rewinding head to replay your work on top of it...
215+
Applying: first steps to extract FigureManager* and friends from pyplot
216+
Applying: split backend_qt4 into two parts, with and without Gcf
217+
Applying: split backend_qt4agg into two parts.
218+
Applying: Added a demo-file to show how to use the FigureManager classes to
219+
Applying: removed un-needed import of Gcf
220+
Applying: pep8 on backend_gtk.py
221+
Applying: pep8 clean up in backend_gdk
222+
Applying: removed un-needed Gcf import
223+
Applying: split backend_gcf into two parts,
224+
Applying: pep8 on backend_gtkagg.py
225+
Applying: split backend_gktagg.py in to two parts
226+
Applying: updated exclude list
227+
Applying: pep8 clean up on backend_gtk3.py
228+
Using index info to reconstruct a base tree...
229+
M lib/matplotlib/backends/backend_gtk3.py
230+
Falling back to patching base and 3-way merge...
231+
Auto-merging lib/matplotlib/backends/backend_gtk3.py
232+
CONFLICT (content): Merge conflict in lib/matplotlib/backends/backend_gtk3.py
233+
Failed to merge in the changes.
234+
Patch failed at 0013 pep8 clean up on backend_gtk3.py
235+
The copy of the patch that failed is found in:
236+
/home/tcaswell/other_source/matplotlib/.git/rebase-apply/patch
237+
238+
When you have resolved this problem, run "git rebase --continue".
239+
If you prefer to skip this patch, run "git rebase --skip" instead.
240+
To check out the original branch and stop rebasing, run "git rebase --abort".
241+
242+
A number of commits could be cleanly applied to
243+
the tip of `upstream/master`, however, git eventualy hit a commit
244+
that had conflicts. In this case in the file
245+
`lib/matplotlib/backends/backend_gtk3.py`. For more verbose information run ::
246+
247+
$ git status
248+
249+
You are currently rebasing branch 'backend_plt_refactor' on 'e6f8993'.
250+
(fix conflicts and then run "git rebase --continue")
251+
(use "git rebase --skip" to skip this patch)
252+
(use "git rebase --abort" to check out the original branch)
253+
254+
Unmerged paths:
255+
(use "git reset HEAD <file>..." to unstage)
256+
(use "git add <file>..." to mark resolution)
257+
258+
both modified: lib/matplotlib/backends/backend_gtk3.py
259+
260+
no changes added to commit (use "git add" and/or "git commit -a")
261+
262+
This exactly where the conflict is and some advice on how to proceed. Opening
263+
up the file in question, you will see blocks that look something like this::
264+
265+
<<<<<<< HEAD
266+
=======
267+
self.__dict__.clear() # Is this needed? Other backends don't have it.
268+
>>>>>>> pep8 clean up on backend_gtk3.py
269+
270+
The block of code between `<<<<<<<` and `=======` is the code on the
271+
target branch (in this case nothing) and the code between `=======`
272+
and `>>>>>>>` is the code on your branch. The rest of the code is the
273+
same between the two branches. You need to determine how to resolve the
274+
conflict (in this case, the code on HEAD is correct). Once you have
275+
resolved all the conflicts, `add` the file to the index::
276+
277+
$ git add lib/matplotlib/backends/backend_gtk3.py
278+
279+
Repeat this for all of the files that have conflicts. When you are done with
280+
that we can check the status::
281+
282+
$ git status
283+
rebase in progress; onto e6f8993
284+
You are currently rebasing branch 'backend_plt_refactor' on 'e6f8993'.
285+
(all conflicts fixed: run "git rebase --continue")
286+
287+
Changes to be committed:
288+
(use "git reset HEAD <file>..." to unstage)
289+
290+
modified: lib/matplotlib/backends/backend_gtk3.py
291+
292+
which shows us that we have resolved all of the conflicts with this
293+
commit and can continue::
294+
295+
$ git rebase --continue
296+
297+
You now iterate the until you have made it through all of the commits
298+
which have conflicts.
299+
300+
Your branch is now rebased, however, because of the way git determines
301+
the hash of each commit, it now shares no commits with your old branch
302+
published on github so you can not push to that branch as you would when
303+
simply adding commits. In order to publish your newly re-based branch you need to
304+
use the `--force` flag::
305+
306+
$ git push --force github
307+
308+
which will _replace_ all of the commits under your branch on github
309+
with the new versions of the commit.
310+
311+
Congratulations, you have re-based your branch!
192312

193313

194314
Style guide

0 commit comments

Comments
 (0)