Skip to content
JasinYip edited this page Dec 17, 2015 · 2 revisions

Git

配置 Git

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 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分支的使用:

  • 一个工程有一个主分支(称为 master 分支,这个分支是一直保持 working 的),在主分支上我们可以开出一个新的分支。

  • 分支的作用主要是用来解决 issue 用的,比如针对一个新的 issue<issue_name> , 若这个 issue 需要我们长时间去维护,我们就可以在远程开出一个名字分支, 并将名字分支命名为 myname/issue_name (让其他人知道这个分支的作用是什么)。 待将这个 issue 解决后,可以把这个名字分支 merge 到主分支上,并且关闭这个名字分支。 一般而言,远程名字分支的创建一个适用于解决比较大的issue,因为这样的分支需要我们长时间去维护; 如果是解决比较小的issue,我们可以不必维护远程的分支,可以只在本地创建分支, 并在merge到本地的master后删除分支。

  • 针对较小的 issue 的本地分支,完整的全命令行流程如下:(不必在远程创建名字分支)

    (1) 当前在 mastergit 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。

Git commit

git commit -v

提交代码的时候加上 -v flag,检查一遍代码 diff 再编写 commit message。

git 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

Github

必读图书: Pro Git

一下午时间就可以看完,如果只挑重要的章节,只需要一两个小时。 请一定花时间看一遍,并且跟着例子动手操作

其他资源