gitflow
修改 .git/config 配置文件
为啥要学Git?答:不学Git,无法参与满足大公司代码开发功能(版本管理、提交代码)。
本文不讲解任何不同代码控制软件的不同,也不讲解可视化版本控制的使用。 为什么?答:大家都用这玩意,你别折腾上古工具(SVN)这些东西。
设置Git默认选项(email&nickname)
git config --global user.email "[your email address]"
git config --global user.name "[your nickname]"
git config -l
history
初次使用Git简单管理文件
git init
[git status]()
git add [filename.filetype] //添加到缓存区
git add .
git commit
git commit -m "[version name]"
git status color:
red :not add
green :had added
版本添加tag
git tag -a [tag name] -m "[tag message]"
git tag -d [tag name]
git tag -l [*0*] //显示所有包含"0"的tag
git push origin --tags
git push origin --delete [tag name]
git show [tag name]
修改commit的信息
git rebase -i [commit id]
git rebase -i --root
具体操作为,修改需要更改commit那行的首个单词(pick)改为reword(r)。退出后,会再次打开一个文件,在这里对首行的信息(message)进行修改。
这里简单诠释一下,以便理解后文。 工作区缓存,是git自动获取的状态也就是git status之后的红字文件。 缓存在后文实际上指工作区的改动,工作区缓存回滚到工作区。就是从工作区缓存(红字)到工作区(无)。从缓存区回滚到工作区缓存则是,从缓存区(绿字)到工作区缓存(红字)。 [last commit id]指的是前一个版本的identification。
tips:命令的参数中,一个杠(-)通常是指缩写,两个杠(- -)通常是指全写,例如上文中的-m实际上就是- -message。
Git操作之回滚(reset)版本
git log
git reset --hard [commit id] //回滚版本
git reflog
git reset --hard [commit id] //回滚参考日志版本(无任何当前工作缓存)
git checkout -- [filename.filetype] //工作区缓存回滚到工作区
git reset HEAD [filename.filetype] //缓存区回滚到工作区缓存
git reset --soft [last commit id] //从版本库回滚到缓存区(添加文件之后(绿))
git reset --mixed [last commit id] //从版本库回滚到工作区缓存(添加文件之前(红))
Git操作之分支(branch)版本
git branch //展示分支
git checkout [branch name] //切换分支
git checkout -b [branch name] //切换并且创建分支
git branch -m [old branch name] [new branch name] //分支改名
git merge [branch name] //合并到哪,切换哪的分支。
git log --oneline //单行显示日志
git log --graph //图形显示日志
git log --graph --pretty=format:"%h %s" //简洁显示日志
git rebase -i --root //显示根日志
git branch -d [branch name] //删除分支
git cherry-pick [branch a name] [branch b name] //合并俩个分支
建议:在开发的时候就生产多个工作流,例如:线上版本(master)、开发功能(dev-[current version])、测试版本(beta-[current version]、漏洞修复(bugfix-[current version])。当测试版本运行没有问题时,可以将其合并到master。
拉取和推送在码云
git remote add [alias] [remote address]/[project name].git
git push -u [alias] [branch name] //-u设置默认提交
git clone [remote address]/[project name].git
git push [alias] [branch name] //推送新内容到远程分支
git push [alias] -d [branch name] //删除远程分支
git pull [alias] [branch name] //拉取远程分支新内容到本地直接合并到分支
git fetch [alias] [branch name] //拉取分支新内容到本地版本库[origin/branch name]
可以自己去设置别名(alias),但是我推荐你写origin。否则你推送下来的文件即有可能默认是origin,而不是你自己写的别名。当你下你自己的文件,很有可能查找分支只有master。你可以查看.git文件夹下的config,查询到底有什么分支。
合并本地日志记录
git rebase -i HEAD~5 //从最上面开始五条记录
git rebase -i [commit id] //所选记录开始所有记录
git rebase -i --root //从根记录开始所有记录
已经到仓库的记录,最好不要进行合并操作。 改打开文件的pick为s,其下有释义。
分支记录合并进主线记录
git checkout [branch name]
git rebase master
git checkout master
git merge [branch name]
拉取远程文件不产生分叉
git fetch [alias] [branch name]
git rebase origin/[branch name]
解决rebase导致的冲突
git rebase [branch name]
git add [filename.filetype]
git rebase --continue
很多IDE软件都自带冲突解决显示,不太需要自己再去下载研究了。并且使用冲突工具解决冲突,很容易使自己写的项目产生致命错误。所以,没事这用这个。
Git克隆分支
git checkout -b [branch name] [remote address]
例如测试人员可以先拉取,beta分支的文件。然后进行测试之后,如无问题创建pull request。向管理者发起合并到主线的请求,通过之后就算是正式发布了。
通过SSH实现免密码登入
ssh-keygen
git remote add origin [ssh remote address]
git push origin master
在不设置的情况下,ssh文件都放置在用户文件夹下.ssh里面,文件名带pub的文件。是公钥,需要将其添加到用户设置中。设置之后,会自动默认验证对配钥匙对。不过新版本下的Git中,有默认帮忙管理权证的功能。
忽略文件
ni .gitignore
/*
input:
[filename.filetype] //忽略特定文件
[*.filetype] //忽略所有同类文件
[dirname]/ //忽略特定目录
*.py[c|d] //忽略后缀为pyc、pyd为文件类型的文件
*/
相关内容
issues:对项目产生问题提问。
wiki:对项目进行解释诠释。
指南过后就可以去了解那些图形化工具。