参考:https://www.cnblogs.com/wupeiqi/p/7295372.html
设置账号
commit之前要先设置账号 git config --global user.email 'xx@xxx.com' git config --global user.name 'xxx'
git常用命令
git init 初始化,表示即将对当前文件夹进行版本控制。 git status 查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。 git add <文件> 将指定文件添加到版本库的暂存状态。 git add . 将全部文件添加到版本库的暂存状态。 git checkout <文件> 从暂存状态拿回工作区 git commit -m '提交信息' 将暂存区的文件提交到版本库的分支。 git commit -a -m '提交信息' ====> 相当于两条命令: 1 git add . 2 git commit -m '提交信息' git log 查看提交记录,即:历史版本记录 git reflog 查看版本历史(更详细) git reset --hard <版本号> 回到某一个版本
git stash和git branch
方式一 git stash
git stash 将工作区(红色的文件)的文件暂存都"某个神奇的地方" git stash pop 将"某个神奇的地方"的第一个记录拿到当前工作区 1 自动合并 2 出现冲突(需要手动解决冲突) git stash list 查看'某个神奇的地方'存储的所有记录 git stash clear 清空'某个神奇的地方' git stash apply <编号> 将指定编号的记录拿回工作区 git stash drop <编号> 将指定编号的记录从工作区删除
方式二 git branch
注意:千万不要在master分支上做开发
git branch <分支名> 【在当前分支上】创建分支 git checkout <分支名> 切换分支 git branch -d <分支名> 删除分支 git merge <分支名> 将分支合并到当前分支 会产生一条合并记录 可能会产生冲突(如果两个分支都修改了同一条记录) git branch 查看分支
合并分支时的三种情况?
1 【直接合并】主分支有的功能, 子分支都有, 并且子分支开发了新功能 2 【会产生一条合并记录】主分支有的【部分】功能, 子分支没有, 并且子分支开发了新功能 3 【会产生冲突,需要自己手动去处理冲突】主分支和子分支修改了同一条代码
本地与云端的交互
代码托管的网站: github Bitbucket 码云
自己创建代码托管的网站: gitlab
1 git remote add origin https://github.com/.... 将远程仓库添加个别名 # origin就是后面仓库地址的别名 2 git push -u origin master 把master推到origin远程仓库 3 git clone <仓库地址> 下载仓库代码 4 git pull origin dev 把分支dev拉取到本地(注意:先自己在本地建个分支dev) git fetch origin dev 将远程分支拉倒本地版本库 git merge origin/dev 将本地origin/dev合并到工作区 ===> 上面两条命令相当于: git pull origin dev git rebase origin/dev (==> 相当于git merge origin/dev, 但这是去看合并历史不会出现分叉) # 保持提交记录的整洁
git之多人协同开发
1 允许他人操作程序
- 合作者 (仓库-->setting-->collaborators)
- 创建组织 (new organization)
2 分支
- master
- dev
- sch
- xdb
3 协同开发规则
一起合并
合并时间:(一般1-2天)小功能开发好了合并一次
问题: git push origin dev 可能会报错
解决办法:先 git pull origin dev 拉取代码
创建review分支
给别人代码贡献力量
问题: 怎么在github上给别人代码添加功能?
1 fork
2 添加完功能
3 pull request
其他
1 不用反复输入用户名密码
方式一: https
git remote add origin https://用户名:密码@github.com/......
方式二: ssh
1 先在本地电脑生成公钥私钥: ssh-keygen.ext
2 把公钥到github上设置
3 通过git@github.com:...下载仓库代码
2 创建忽略文件
1 项目目录下: vim .gitignore
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# Byte-compiled / optimized / DLL files # pycharm .idea/ .DS_Store offline-script/ media/ # database migrations */migrations/*.py !*/migrations/__init__.py __pycache__/ *.py[cod] *$py.class # Django stuff: *.log local_settings.py *.sqlite3 # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json
2 可以在创建github仓库时选上
3 版本
git tag -a v1.0 -m '版本介绍' 本地创建Tag git show v1.0 查看 git tags -n 查看本地Tag git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配 git tag -d v1.0 删除Tag git push origin :refs/tags/v0.2 更新远程tag git checkout v.10 切换tag git fetch origin tag V1.2 git push origin --tags git pull origin --tags git clone -b v0.1