> Even a simple merge/rebase leaves one confused. Which should I use?
Merge merges two branches. You fork a branch off master, work on stuff until it's done, then merge it back into master. After that the branch can go away.
Rebase is for rewriting history. To get rid of the 20 embarrassing commits where you tweaked stuff at random hoping to get it to work, or to redo a bunch of changes in a more coherent and easier to review way. It can be used to transplant work from one branch to another. It also can be used to keep up with the changes in the branch you forked off from.
> What is incoming? Why does incoming change as you progress?
Not quite sure what you mean, could you provide more details?
> I didn't change anything (on purpose) but Git won't let me change branches.
Probably because changing branches would lose your current work. It can happen either mid-rebase, or because you modified a file that would be overwritten by a branch change.
> How do I just unfuck what I did and go back to a branch?
You can abort a rebase with `git rebase --abort`. This loses progress.
> Git might have awesome tech underneath, I really don't know or care. But someone needs to really spend time in a typical dev's shoes to make it nicer to use.
I agree the UI leaves a lot to be desired. But the main thing is that you need to understand what it is that you want to accomplish first, especially in the merge/rebase question.
> Even a simple merge/rebase leaves one confused. Which should I use?
Merge merges two branches. You fork a branch off master, work on stuff until it's done, then merge it back into master. After that the branch can go away.
Rebase is for rewriting history. To get rid of the 20 embarrassing commits where you tweaked stuff at random hoping to get it to work, or to redo a bunch of changes in a more coherent and easier to review way. It can be used to transplant work from one branch to another. It also can be used to keep up with the changes in the branch you forked off from.
> What is incoming? Why does incoming change as you progress?
Not quite sure what you mean, could you provide more details?
> I didn't change anything (on purpose) but Git won't let me change branches.
Probably because changing branches would lose your current work. It can happen either mid-rebase, or because you modified a file that would be overwritten by a branch change.
> How do I just unfuck what I did and go back to a branch?
You can abort a rebase with `git rebase --abort`. This loses progress.
> Git might have awesome tech underneath, I really don't know or care. But someone needs to really spend time in a typical dev's shoes to make it nicer to use.
I agree the UI leaves a lot to be desired. But the main thing is that you need to understand what it is that you want to accomplish first, especially in the merge/rebase question.