From: Theodore Tso Date: Tue, 24 Jun 2008 13:13:15 GMT Subject: Re: why is git destructive by default? (i suggest it not be!) Message-ID: <20080624131315.GD7639@mit.edu> In-Reply-To: On Tue, Jun 24, 2008 at 03:24:00AM -0700, David Jeske wrote: > Odd. I've never been a gatekeeper. I'm just a developer who has burned > himself enough times that I want a tool (i.e. source control) to help > prevent me from ever destroying anything I create. It sounds like the main problem is that you need to learn more about how to use the your tools. If you use the tools right, the number of times that you you'll accidentally overwrite a branch pointer is quite rare; and generally you notice right away; the default GC period of 30 days is a L-O-N-G time, and in practice its more than enough time for someone to notice that they screwed up. So a couple of tips 1) "git reflog show " is a great way to only look at changes to a particular branch. ("git log -g" or "git reflog show" defaults to showing the reflog for HEAD) 2) A number of accidents with "git rebase" happen because people forget which branch they are on. So having your command line prompt tell you which branch you are on is really helpful. Google "git prompt shell" for some examples of how to do this. I do something like this: function __prompt_git() { local git_dir ref br top; git_dir=$(git-rev-parse --git-dir 2> /dev/null) || return ref=$(git-symbolic-ref HEAD 2> /dev/null) || return br=${ref#refs/heads/} top=$(cat $git_dir/patches/$br/current 2>/dev/null) \ && top="/$top" echo "[$br$top]" } if [ $UID = 0 ]; then u="${LOGNAME}.root" p="#" else u="$LOGNAME"; p="%" fi if [ $SHLVL != 1 ]; then s=", level $SHLVL" fi PS1="<${u}@${HOSTNAME}> {\${PWD}}$s \$(__prompt_git)\n\!$p " unset u s - Ted