1、github VS git
1、git:开源的分布式控制系统。跟踪和管理源代码、支持多人协作开发。版本控制、分支管理、合并和冲突解决等。基于命令行工具,可以在本地计算机上完全离线工作
2、github:基于git的在线托管平台(开源),提供git仓库的托管服务。提供问题跟踪、项目管理、代码审查、团队讨论、Wiki页面等。管理自己代码或参与其他人项目
本地使用
git
进行版本控制,然后代码推送到github
上进行共享和协作
2、github使用
1、注册,登录github(https://github.com/
),create a new repository
带*号的为必填项,其他为非必填项
建议Public(公有),Private需付费
2、本地安装git:Git下载安装教程 - 知乎
仓库语言:1、创建仓库时指定语言;2、提交或新增代码后,github自动识别
3、git与github绑定
3.1、配置git
1、本地创建ssh key
ssh-keygen -t rsa -C "git@hub.com"
后面的邮箱为github上注册的邮箱。之后的确认路径、输入密码,则不输入直接回车即可
在~/
下生成.ssh文件,进入后,打开id_rsa.pub,复制里面的key即可
若创建成功,.ssh文件在
c:/用户/xxx(用户名)
下看不到,则打开隐藏文件的展示即可
2、github添加ssh key
3、验证
git bash中,输入:ssh -T git@hub.com
4、配置username和email
get config --global user.name "your name"
get config --global user.email "your email"
your name
与your email
最好与github
上账号和名称一致
5、本地仓库上传github
方式1: 本地无仓库
创建新文件夹(作为仓库)后,鼠标右键打开gitbash执行命令
git init
# 创建新的git仓库
git remote add origin git@github.com:yourName/yourRepo.git
# 关联远程仓库;yourName
和 yourRepo
表示在github的用户名和仓库。
origin: 默认远程仓库名称。克隆远程仓库时,git自动创建一个指向该远程仓库的别名,即
origin
3.2 克隆
方式2:本地没有git仓库,则clone远端仓库到本地,然后修改或添加,之后commit
git clone <url>
# 克隆远端仓库
git clone 本地仓库 仓库克隆版本
# 克隆本地仓库
3.3 push 上传
- 工作目录:实际文件
- 暂存区Index:临时保存你的改动
- HEAD:指向最后一次提交结果
一般push之前,都会pull操作,减少冲突
1、git add <filename>
或 git add *
# 提交改动,添加到暂存区
2、git commit -m "代码提交信息"
# 实际提交改动到HEAD(本地仓库的HEAD)
3、git push origin master
# 推送改动
master 换成你想要推送的任何分支
网页添加文件,上限50MB;命令行添加文件,上限100MB
4、分支
创建仓库时,master是默认分支
在其他分支上进行开发,完成后再将他们合并到主分支上
git checkout -b <branch/tag>
# 新增并切换到指定分支(先进入对应仓库下)git checkout master
# 切换回主分支git branch -d <branch>
# 删除本地分支git push origin <branch>
# 推送分支到远端;否则该分支不为他人所见
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject
$ git branch branch_1 # 创建新分支失败:非仓库目录下
fatal: not a git repository (or any of the parent directories): .git
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject
$ cd python_clone # 进入仓库
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (main)
$ git branch branch_1 # 创建新分支(多个分支时,目录后标注当前分支)
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (main)
$ git checkout branch_1 # 切换到新分支
Switched to branch 'branch_1'
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (branch_1)
$ git branch -d branch_1 # 删除新分支失败:当前新分支不能删除
error: cannot delete branch 'branch_1' used by worktree at 'D:/py/Python/PycharmProjects/gitproject/python_clone'
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (branch_1)
$ git checkout master
error: pathspec 'master' did not match any file(s) known to git
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (branch_1)
$ git checkout main # 切换回主分支
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (main)
$ git branch -d branch_1 # 删除新分支
Deleted branch branch_1 (was 0e02d19).
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (main)
$ git checkout -b django # 创建并切换到新分支
Switched to a new branch 'django'
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (django)
$ git push origin django # 推送新分支
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To D:/py/Python/PycharmProjects/gitproject/python
* [new branch] django -> django
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (django)
$ git branch # 列举所有分支
* django # * 表示当前分支
main
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (django)
$
4.2 更新与合并分支
git pull
# 拉取,更新本地仓库到最新
git merge <branch>
# 合并指定分支到当前分支
- 合并冲突
手动修改这些文件来手动合并冲突
git add <filename>
git diff <source_branch> <target_branch>
# 合并修改前,可以预览差异
git rebase <branch>
# 衍合指定分支到当前分支
5、标签?
git tag
# 列出所有本地标签
git tag <tagname>
#基于最新提交创建标签
git tag -d <tagname>
# 删除标签
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (deom)
$ git tag v1.0.0
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (deom)
$ git tag
v1.0.0
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone (deom)
$ git checkout v1.0.0 # 切换tag
Note: switching to 'v1.0.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at c4ff9f4 a_branch:add a.txt
29447@LAPTOP-wlh MINGW64 /d/py/Python/PycharmProjects/gitproject/python_clone ((v1.0.0)) # 显示当前tag
$
6、撤销
git checkout --<filename>
# 替换本地改动(最好不用);HEAD中的最新内容替换工作目录中的文件。已添加到暂存区的改动以及新文件都不会影响
git fetch origin
# 从origin获取代码
git reset --hard origin/master
丢弃本地的所有改动与提交,到服务器获取最新版本,并将本地主分支指向它
其他:
图形化git:gitk
彩色的git输出:git config color.ui true
显示历史记录时,每个提交的信息只有一行:git config format.pretty oneline
交互式添加文件到暂存区:git add -i