//Configure the user which will be used by git
//Of course you should use your name
$ git config --global user.name "xxxxx"
// Same for the email address
$ git config --global user.email "xxxx@xxx.xxx.xx"
// Set default so that all changes are always pushed to the repository
$ git config -- list
切换到本地dev分支:$ git checkout dev
同步远程dev 分支:$ git pull
2 本地分支操作
查看分支:$ git branch
创建分支:$ git branch name
切换分支:$ git checkout name
创建+切换分支:$ git checkout -b name
合并某分支到当前分支:$ git merge name
删除分支:$ git branch -d name
强制删除分支:$ git branch -D name
和远程连接:$ git branch --set-upstream dev origin/dev
Tip: 下面两个是同等的
a. 本地创建和远程分支对应的分支: $ git checkout -b dev origin/dev
b.
创建分支: $ git branch dev
切换分支:$ git checkout dev
和远程连接:$ git branch --set-upstream dev origin/dev
Useful Link :
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/
Command:
Init Git Desktop
//Configure the user which will be used by git //Of course you should use your name $ git config --global user.name "xxxxx" // Same for the email address $ git config --global user.email "xxxx@xxx.xxx.xx" // Set default so that all changes are always pushed to the repository $ git config -- list
Local Command:
Remote Command:
创建ssh key命令 $ ssh-keygen -t rsa -C "youremail@example.com" 并且添加public key to github Setting/SSH Key
跟本地连接起来 本地连接远程:$ git remote add origin xxxxx 本地删除远程连接:$ git remote remove origin
Normal Flow with Local and Remote:
从远程克隆项目:$ git clone git@xxx
从本地上传代码: $ git push -u origin master(already set-upstream) $ git push origin master(local/master -> origin/master) $ git push origin dev(local/dev -> origin/dev) $ git push Tip : a. Cannnot push to origin/master from local/dev b. Local dev branch connect to remote branch : $ git branch --set-upstream dev origin/dev
查看远程连接: $ git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push)
Tip:上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push 地址。
Project Example:
一般GitHub 上需要两个branch, master 是负责release 的分支(相当于之前RTC的Prod Stream),dev 是日常开发的分支(相当于之前RTC 的 dev Stream)。 一般同事都是从远端同步 dev 的代码下来, 然后自己创建自己的branch修改,push 到远程自己的branch, 再在远程pull request 到dev 分支。这样做可以做到修复bug 的时候有最干净的dev 去开始工作! 远程的master 需要同步到本地,但是除非出街打包才merge 这个branch! 建议保护master 这个分支,意味着不能本地提交代码到远程的master, 只能从远程的dev pull request 到远程的master 分支,并且需要review pull request!
1 同步远程dev 分支
切换到本地dev分支:$ git checkout dev 同步远程dev 分支:$ git pull
2 本地分支操作
查看分支:$ git branch 创建分支:$ git branch name 切换分支:$ git checkout name 创建+切换分支:$ git checkout -b name 合并某分支到当前分支:$ git merge name 删除分支:$ git branch -d name 强制删除分支:$ git branch -D name 和远程连接:$ git branch --set-upstream dev origin/dev
Tip: 下面两个是同等的 a. 本地创建和远程分支对应的分支: $ git checkout -b dev origin/dev b.
创建分支: $ git branch dev 切换分支:$ git checkout dev 和远程连接:$ git branch --set-upstream dev origin/dev
3 解决冲突
在master 和dev 分别改了同一行代码,当master merge dev 会冲突,需要手动改了之后再git add/git commit。之后回到dev 也得要merge master 过来(这时候git 会自动处理,不需要手动merge)。
禁用ff 模式merge:
$ git merge --no-ff -m "xxxxx" branch Tip: 禁用“Fast forward”模式,Git就会在merge时生成⼀个新的commit,这样,从分支历史上就可以看出分支信息。
查看merge 历史纪录:
$ git log --graph --pretty=oneline --abbrev-commit 4 提交到远程 从本地dev 提交到远程dev分支:$ git push origin dev
Tip: a. 如果推送失败,则因为远程分支比你的本地更新,需要先用 $ git pull试图合并 b. 如果合并有冲突,则解决冲突,并在本地提交 c. 没有冲突或者解决掉冲突后,再用 $ git push origin branch-name推送就能成功 d. 如果git pull提⽰示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令 $ git branch --set-upstream branch-name origin/branch-name
4 紧急修复bug,stash功能
保护dev branch现场:$ git stash 创建bug branch:$ git checkout–b bugFixing-issue001 合并到dev branch 提交:$ git merge --no-ff –m “xxx” bugFixing-issue001 删除bug branch:$ git branch–d bugFixing-issue001 恢复现场:$ git stash pop 多个现场列表:$ git stash list 恢复某个指定现场:$ git stash apply stash@{X}
5 打标签,tag功能
在RTC中,每次在dev stream 打测试包都需要打baseline, 每次上线前都需要在prod stream 上打baseline;同样的,在GitHub 中,我们也需要这样的操作!
本地打标签:
切换到相应分支:$ git checkout dev/$ git checkout master 同步和远程的代码:$ git pull/$ git pull origin dev/$ git pull origin master 打标签: $ git tag tagName $ git tag –a tagName -m “xxx” $ git tag tagName commit_id($ git log –pretty=oneline –abbrev-commit) $ git tag –a tagName -m “xxx” commit_id 查看标签信息:$ git show tagName 查看标签列表:$ git tag 删除本地标签:$ git tag –d tagName 提交标签到远程: $ git push origin tagName $ git push origin --tags 删除远程标签: a. 先从本地删除:$ git tag -d v0.9 b. 再从远程删除: $ git push origin :refs/tags/v0.9
Other:
忽略特殊文件:添加 .gitignore 文件到版本库 配置快捷键: $ git config --global alias.st status $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch $ git config --global alias.unstage 'reset HEAD $ git config --global alias.last 'log -1' $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"