I'm a non git expert and I would prefer to have guidelines to follow.
Understanding the complexities here is not something I have any interest
in. I just want to merge and commit in some agreed apon standard way.

Joel Bernstein
http://joelsolr.blogspot.com/

On Mon, Jan 25, 2016 at 10:37 AM, Shai Erera <ser...@gmail.com> wrote:

> Hi Dawid,
>
> Yes, I know what --amend does. I never amend the parent commit, only my
> initial commit. I think we're talking about the same thing, but just to
> clarify, this is what I mean:
>
> git checkout -b feature-branch
> git commit -a -m "message"
> (Get reviews)
> git commit --amend (addressing review comments)
>
> I do not intend to stack additional commits on top of the initial commit,
> and then in the end squash them or whatever. I treat it all as one piece of
> work and commit, and I don't think our history should reflect every comment
> someone makes on an issue. In analogy, today in JIRA we always update a
> full .patch file, and eventually commit it, irrespective of the number of
> iterations that issue has gone through.
>
> Again, I think we're sync, but wanted to clarify what I meant.
>
> About the guidelines, I'd prefer that we use rebase, but that's not what I
> was after with the guide. Today I've made my first commit to Git (in
> Lucene!), and the way I handled trunk and branch_5x is as follows:
>
> git checkout -b feature master (i.e. trunk)
> (work, commit locally, publish ...)
> (time to push, i.e. SVN commit)
> git fetch origin
> git checkout master && git pull --rebase (this is nearly identical to the
> previous 'svn up')
> git checkout feature && git rebase master
> git push origin HEAD:master (this is the equivalent of svn commit)
>
> ('merge' to branch_5x)
> git checkout branch_5x
> git pull --rebase (pulls from origin/branch_5x)
> git checkout -b feature_5x branch_5x
> git cherry-pick feature (this is partly 'svn merge')
> git push origin HEAD:branch_5x
>
> (a) Is this (one of) the correct way to do it?
> (b) Is there a less verbose way to do it, aside from rebasing feature on
> origin/branch_5x?
>
> So, if we can have such sequence of operations written somewhere, even if
> only as a proposed way to handle it, I think it will make it easy on the
> Git newcomers among committers, since they're going to need to do this a
> lot. And certainly if there's a quicker way to do it!
>
> Shai
>
> On Mon, Jan 25, 2016 at 5:15 PM Dawid Weiss <dawid.we...@gmail.com> wrote:
>
>> Hi Shai,
>>
>> > I usually do 'git commit --amend',
>>
>> When do you do this? Note that what the above command does is:
>>
>> 1) it takes the last commit on the current local branch,
>> 2) it takes its parent commit,
>> 3) it applies the diff from the last commit to the parent, permits you
>> to modify the message and commits this new stuff on top of the parent,
>> *resetting* the branch's HEAD reference to this new commit.
>>
>> If you already pushed your unamended commit to the remote then it's
>> too late -- you'd end up with diverged local branch. Again, the
>> simplest way to "see" this would be gitk. I'm sorry if I'm explaining
>> something obvious.
>>
>> > is beneficial. But if I upload a patch, get reviews and intend to
>> upload an
>> > updated patch, I will --amend my commit.
>>
>> I don't see any relation with commits and --amend here. As long as
>> you're working on a branch, this really doesn't matter -- you can just
>> commit your changed stuff after a review and push it to a remote
>> feature branch for others to see (or keep it local if you work on it
>> alone). Amending commit is meant merely to fix a typo in a commit
>> message. Yes, you can play with commits in a serious way (skipping
>> commits, merging them together, changing commit  contents, etc.), but
>> this is really beyond the scope of a new git user (for those who are
>> interested -- see what an interactive rebase is -- rebase -i).
>>
>> > I also agree w/ Uwe, I think it will really help if we have a
>> > guidelines/cheatsheet that document how do we expect dev to happen in
>> the
>> > Git world.
>>
>> Even if it seems right I don't think this is realistic, given that
>> people have their own preferences and (strong) opinions. For example I
>> disagree with Mark that multiple merges and then final merge are a bad
>> thing in general. They are fairly straightforward in the commit graph
>> and they very clearly signify that somebody was working on their own
>> stuff and periodically synced up with changes on the master (or any
>> other branch). Finally, when the feature is ready, a merge to the
>> mainline happens. It's no different to what we used in SVN, actually.
>> This is a classic example of flying fish strategy -- it's been with
>> versioning systems for ages. What I think Mark is worried about is
>> merges across multiple branches, which indeed can quickly become
>> mind-boggling. That's why I suggested that, at first, everyone should
>> stick to simple cherry picks and squashed merges -- not that they're
>> "the best" way to work with git, it's just that they're conceptually
>> simpler to understand for those who start their adventure with
>> distributed revision control systems. I personally use a lot of
>> partial merges and I have no problem with them at all.
>>
>> > What you (Dawid) put on Github is great for Git newcomers, but as
>> > a community I think that having rough standards and guidelines will
>> help,
>>
>> I didn't have enough time and I'm on vacation with my family this
>> week. But I agree with Robert here -- these guidelines should make the
>> job easier for people who are new to git, but they should *not*
>> restrict the liberty of how one chooses to work in general. We can
>> make some restrictions with respect to "release" branches -- master,
>> branch_5x, but I don't see the reason of forbidding whatever one
>> desires on private branches. Also, see my example below.
>>
>> >> git merge origin/master   # merge any changes from remote master,
>> >
>> > I would do a rebase here. Is there a reason you pick merge in the
>> example -
>> > i.e. do u think it's the preferred way, or was it just an example?
>> (asking
>> > for educational reasons)
>>
>> See the attached picture, it highlights four different ways in which a
>> branch can be reintegrated into the mainline, definitely not
>> exhausting all the possibilities. The difference between them is in:
>>
>> 1) how frequently (and when) you resolve conflicts  against the branch
>> you eventually target your work at; I'd argue it's simpler with
>> multiple partial merges during your work on a feature than one final
>> rebase (which needs to resolve conflicts for all commits),
>> 2) whether you want others to see intermediate stages of your work or
>> just the final outcome,
>> 3) how difficult it'll be to reapply the patch to some other branch.
>> 4) if you rebase your feature branch all the commits hashes change. In
>> effect, you can't really work on a single feature branch with others
>> -- you'd be overwriting each other's changes by forcing new commits
>> with push to a common repository.
>>
>> I don't think any of them is better than another, they're just
>> different. I do all of these things depending on the circumstances.
>>
>> > 'svn' does the equivalent of a git rebase when pushing a new commit
>> that isn't otherwise some explicit merge.
>>
>> Hmm.. I think in this case the comparison to SVN is apples to oranges
>> because SVN lacks a lot of the extended scenarios of what git rebasing
>> is used for. In my example, see the fourth strategy -- this is
>> canonical "merge a feature atomically, preserving all intermediate
>> commits" case. It has benefits if you wish to see how the feature
>> evolved, but it still very intuitive (and easy to revert).
>>
>> Dawid
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
>> For additional commands, e-mail: dev-h...@lucene.apache.org
>
>

Reply via email to