如何使用Git?
1.Git简介:
Git是目前世界上最先进的分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。
版本控制系统两大功能:
1:可以回溯历史,很容易回到之前的某个版本
2:多人合作时,很容易将代码合并到一起
分布式版本控制系统优点:项目组每个人电脑上都有版本信息的记录
普通版本控制系统:版本记录只存在于服务器上,每个人本地只有代码,而不能记录版本
官网:https://git-scm.com/
windows安装:
进入官网,点击合适的版本进行安装
ubuntu安装:
sudo apt-get install git
安装成功后使用如下命令:
git
会出现git的使用命令介绍
2.远程仓库的创建
1.事先注册好github账号,登陆GitHub
2.在右上角找到“new repository”按钮,创建一个新的仓库
3.仓库名可以任意取,并且可以在Description框里添加一些该仓库的描述信息
4.仓库有public和private(收费)两种模式,通常我们选择public存放一些开放源代码
5.可以对仓库进行一些初始化操作(可选):
Add a README file-------可以在里面添加对该仓库的详细描述信息
Add .gitignore------比如选择python,那么提交的时候会过滤掉pyc文件
Choose a license------比如选择GNU General Public License
3.远程仓库克隆到本地
将github上的项目,克隆到本地一份,并将本地仓库和github上的仓库进行关联起来。在本地有权限的目录下执行,该目录下会自动生成一个远程仓库名的目录,并且在该目录下会生成.git的一个隐藏文件,切忌修改任何内容
克隆到本地有HTTPS,SSH等方式:
HTTPS方式:
命令:git clone <远程库https地址>
这种克隆方式,每次从本地库提交代码到远程库的时候都需要输入账号名和密码
SSH方式:
命令:git clone <远程库SSH地址>
这种方式首先我们需要创建项目的SSH Key:
- 执行命令:ssh-keygen -t rsa -C "邮箱"
- 执行命令后,在用户主目录里能找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人
- 接着登录github注册或登录账号,打开“settings”的“SSH Keys”页面,然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key
- 测试是否能够连接:ssh -T git@github.com
这种克隆方式,之后每次从本地库提交代码到远程库,都不需要输入账号和密码
4.设置和查看用户名和邮箱
尽量将git客户端的用户名、邮箱和github账号的用户名、邮箱设置为完全一致
设置全局用户名和邮箱:
git config --global user.name '用户名'
git config --global user.email '邮箱地址'
查看全局用户名和邮箱:
git config --global user.name
git config --global user.email
注意:当前库的操作需要在当前库根目录下(即.git隐藏文件所在目录下)进行
设置当前库的用户名和邮箱:
git config user.name "用户名"
git config user.email "邮箱地址"
查看当前库的用户名和邮箱:
git config user.name
git config user.email
5.本地库与远程库交互
-
5.1 远程库别名操作
- 查看所有远程库别名
git remote -v
- 给远程库起别名
git remote add <别名> <远程库地址>
比如 git remote add origin https:xxx.git
- 删除别名
git remote remove <别名>
- 查看所有远程库别名
-
5.2 Push -- 使用本地分支来更新合并远程分支
git push <远程主机名> <本地分支名>:<远程分支名>
-
省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被创建。
git push origin master
将本地的master分支推送到origin主机的master分支。如果后者不存在,则会创建。
- --delete 分支名 (表示删除分支)
git push origin --delete dev
表示删除origin主机上的dev分支
- --force(忽略冲突,强制推送本地分支到远程)
git push origin master --force
在远程主机产生一个”非直进式”的合并(non-fast-forward merge),除非你很确定要这样做,否则应避免
- --tags(带上该版本标签推送)
git tag -a 'version-2.1' -m '版本2.1' git push origin master:master --tags
给当前库打上version-2.1标签,并提交
-
-
5.3 Pull -- 拉取并合并远程分支到本地
git pull <远程主机> <远程分支>:<本地分支>
- 省略本地分支,则自动合并到当前分支
git pull origin master
- 省略本地分支,则自动合并到当前分支
6.分支操作
-
查看分支
git branck -v
-
创建分支
git branch <分支名>
-
切换分支
git checkout <分支名>
-
创建并切换到该分支
git checkout -b <分支名>
-
删除本地分支
git branch -d <分支名>
-
删除远程分支
git push <远程主机名> --delete <分支名>
-
合并分支
git merge <分支名>
合并指定分支到当前分支
7.配置Git忽略文件
- 创建忽略规则文件git.ignore(前缀名随便起),建议放在用户家目录下
# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-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/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # 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 # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ .idea *.iml
- 在家目录下的.gitconfig 文件中引用忽略配置文件,注意路径使用‘/’连接
[user] name = <用户名> email = <邮箱地址> [core] excludesfile = C:/Users/<用户目录名>/git.ignore
8.Git常用命令
git config --global user.name <用户名> 设置用户名
git config --global user.email <邮箱> 设置用户邮箱
git init 初始化本地库
git status 查看本地库状态
git add <文件名> 添加文件到暂存区
git commit -m "日志信息" <文件名> 提交到本地库
git reflog 查看历史版本记录
git reset --hard <版本号> 版本穿梭