-
Notifications
You must be signed in to change notification settings - Fork 4
JasinYip edited this page Dec 17, 2015
·
2 revisions
git config --global user.name 'your name' git config --global user.email 'your email' git config --global color.ui auto git config --global color.status true git config --global color.branch auto git config --global color.diff auto git config --global push.default upstream
- 建议使用最新稳定版的 Git(>2.0)。
- 善用 git aliases http://githowto.com/aliases
git config --global alias.co checkout git config --global alias.ci commit git config --global alias.st status git config --global alias.br branch git config --global alias.rb rebase git config --global alias.mg merge git config --global alias.type 'cat-file -t' git config --global alias.dump 'cat-file -p'
- 美化 git log、diff 的输出 Must Have Git Aliases: Advanced Examples 和
Pretty Log in Git
- 我写了一个 gist 可以直接用 https://gist.github.com/ifduyue/b1ffe6eab318a8b80498#file-add-git-aliases-sh
- one-liner:
curl -fsSL https://gist.githubusercontent.com/ifduyue/b1ffe6eab318a8b80498/raw/add-git-aliases.sh | bash
- one-liner:
- 我写了一个 gist 可以直接用 https://gist.github.com/ifduyue/b1ffe6eab318a8b80498#file-add-git-aliases-sh
- 设置 bash prompt: https://github.com/magicmonty/bash-git-prompt
-
一个工程有一个主分支(称为
master
分支,这个分支是一直保持 working 的),在主分支上我们可以开出一个新的分支。 -
分支的作用主要是用来解决 issue 用的,比如针对一个新的 issue<issue_name> , 若这个 issue 需要我们长时间去维护,我们就可以在远程开出一个名字分支, 并将名字分支命名为
myname/issue_name
(让其他人知道这个分支的作用是什么)。 待将这个 issue 解决后,可以把这个名字分支 merge 到主分支上,并且关闭这个名字分支。 一般而言,远程名字分支的创建一个适用于解决比较大的issue,因为这样的分支需要我们长时间去维护; 如果是解决比较小的issue,我们可以不必维护远程的分支,可以只在本地创建分支, 并在merge到本地的master后删除分支。 -
针对较小的 issue 的本地分支,完整的全命令行流程如下:(不必在远程创建名字分支)
(1) 当前在master
,git branch new_issue_solver
开出一个新的分支(2)git checkout new_issue_solver
拉到新开的分支上进行工作(3) 进行开发过程(4) 开发结束后,git add ...; git commit
,将分支上的修改提交到本地缓存。(5) 接下来git checkout master
;回到了master
(6)git pull —rebase origin master
(确认你的主分支更新到最新)(7)git merge new_issue_solver
(在主分支合并你的issue解决的分支)(8) 如果merge
后发生冲突,则使用git status
查看冲突的地方,然后手动解决冲突。(9) 然后git add...; git commit -m "Solve conflict"
(10) 最后git push origin master
将本地的master
分支push
到远程的master
分支上。 -
如果是在 github 上面使用界面操作 merge:(需要在远程创建名字分支)
(1)~(4) 同上,接下来的步骤是:(5) 继续在new_issue_solver
分支上,使用git pull --rebase origin master
(更新所有主分支已经做了的更新到你的分支)(6) 如果出现了冲突,在你的分支 solve 冲突;然后确认new_issue_solver
分支上的功能正常(7) 然后git add ...;git commit -m "...";git push origin new_issue_solver
(8) 这时候,再去 github 关于刚才的 new_issue_solver 分支发起PR,然后@其他的同事
来看,等待同事 merge 并关闭分支 -
注意:
(1)@branch1
,git merge branch2
这表达的是,当前在 branch1,将 branch2 的内容合并到 branch1(2) master分支理论上来说,是不进行开发调试的。master 分支的代码,应该一直的 working,而不应该出现任何 functionally 不正确的地方(3) 在等待合并的同时,可以git checkout master; git branch a_new_issue; git checkout a_new_issue
;继续从当前主分支上开始解决下一个问题(4) 在本地如果需要删除一个分支,请先从这个分支 checkout 出去,比方说 checkout 到主分支。然后git branch -d <你要删除的分支名>
(5) 如果你只是想重命名当前所在分支,而不是删除一个分支,可以直接在当前分支git branch -m <新分支名>
(6) commit的格式,git commit -m "close #issue_number <info>"
,这样可以在push成功后自动关闭某个 issue(7) PR是需要等待的,需要等待其他同事来 review。
提交代码的时候加上 -v
flag,检查一遍代码 diff 再编写 commit message。
- 书写有意义的 commit message。保持在50个字符内,末尾跟上相关的 issue id,如 #42。
- 如果一行写不下,那么在第一行简单的介绍,然后空一行详细的描述。
下面是一个例子(来自 http://git-scm.com/book/ch5-2.html):
Short (50 chars or less) summary of changes
More detailed explanatory text, if necessary. Wrap it to
about 72 characters or so. In some contexts, the first
line is treated as the subject of an email and the rest of
the text as the body. The blank line separating the
summary from the body is critical (unless you omit the body
entirely); tools like rebase can get confused if you run
the two together.
Further paragraphs come after blank lines.
- Bullet points are okay, too
- Typically a hyphen or asterisk is used for the bullet,
preceded by a single space, with blank lines in
between, but conventions vary here
- 英文版: http://git-scm.com/book/en/v2
- 中文版: http://git-scm.com/book/zh/v2 (部分翻译)
- 中文老版: http://git-scm.com/book/zh/v1 (完整翻译)
一下午时间就可以看完,如果只挑重要的章节,只需要一两个小时。 请一定花时间看一遍,并且跟着例子动手操作。
- [slides] Understanding Git: 讲解非常清楚,配图帮助理解,覆盖 merge、rebase
- [book] https://progit.org/
- [blog] squashing commits with rebase
- [blog] git add -p