git使用
一 下载安装
官网下载安装:https://git-scm.com/downloads
二 git工作流程
三 基础命令
在要托管的文件夹下右击以Git Bash Here打开
将文件夹初始化为git仓库
git init
初始化成功后会多一个.git文件夹
** 设置全局用户**
git config --global user.name '用户名'
git config --global user.email '用户邮箱'
C:\Users\用户文件夹.gitconfig新建用户信息,在所有仓库下都可以使用。
设置局部用户
git config user.name '用户名'
git config user.email '用户邮箱'
在当前仓库下的config新建用户信息,只能在当前仓库下使用。
注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户。
查看仓库状态
当仓库中有文件增加、删除、修改,都可以在仓库状态中查看。
空文件夹不会被git记录
# 查看仓库状态
git status
# 查看仓库状态的简约显示
git status -s
工作区内容提交到暂存区
# 全部提交到暂存区
git add .
# 指定文件提交到暂存区
git add '文件名'
提交暂存区内容到版本库
git commit -m '版本描述信息'
查看历史版本
git log
# 精简版
git reflog
# 什么时间之后
git log --after=2022/11/7
git reflog --after=2022/11/7
# 什么时间之前
git log --before=2022/11/9
git reflog --before=2022/11/9
# 查看指定开发者的记录
git log --author '用户名'
git reflog --author '用户名'
撤销工作区操作:改、删(了解)
# 将所有修改的文件和删除的文件恢复
git checkout .
# 指定回复的文件
git checkout '文件名'
撤销暂存区提交:add的逆运算(很少使用)
# 将所有暂存区的文件拉回工作区
git reset HEAD .
git reset .
# 将指定文件从暂存区的文件拉回工作区
git reset HEAD '文件名'
git reset '文件名'
回滚到指定版本
# 回滚到上一个版本
git reset --hard HEAD^
git reset --hard HEAD~
# 回滚到上两个版本
git reset --hard HEAD^^
git reset --hard HEAD~~
# 回退到指定版本号
git reset --hard 版本号
(git log 和git reflog) ( git reset --hard,–mix,–soft)的区别
git log::命令可以显示所有提交过的版本信息如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息。
git reflog: 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
git reset --hard:全部删除,会彻底返回到回退前的版本状态,了无痕迹。
git reset --mix:保留工作目录,文件回退到未commit的状态。
git reset --soft:保留工作目录、暂存区 ,文件会回退到未 add(未到暂存)的状态。
总结:soft是撤销commit的提交,但工作区未提交的更改还是保留;mixed是撤销暂存区的提交,工作区的更改同样也保留;而hard是把工作区、暂存区、commit到仓库的三个版本都回滚了。
四 忽略文件
在仓库跟目录下创建.gitignore文件。
过滤文件内容
- 文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
- /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
示例:
.idea 项目中的.idea文件和文件夹被忽略
*.log 项目中所有的.log文件和文件夹被忽略
__pycache__ 项目中的所有__pycache__文件和文件夹被忽略
script 项目中的script文件和文件夹被忽略
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
五 多分支开发
分支操作
# 创建分支
git branch 分支名
# 查看分支
git branch
# 切换分支
git checkout 分支名
# 创建并切换分支
git checkout -b 分支名
# 删除分支
git branch -d 分支名
# 查看远程分支
git branch -a
# 合并分支
# 把dev分支合并大master分支上
# 切换到master分支
git merge 分支名
六 git远程仓库
新建空的gitee仓库
连接远程仓库
第一次push需要输入gitee账号和密码,以后就不用了。输入的信息永久保存在Windows凭据里。
新建不是空的gitee仓库
先将远程仓库克隆到本地
git clone https://gitee.com/xuxiaoxu1/luffy_api.git
将项目文件复制到本地克隆的文件里,再将项目代码copy到克隆文件里
七 remote源操作
# 查看仓库已配置的远程源
git remote
git remote -v
# 删除远程源
git remote remove 源名
# 添加远程源
git remote add 源名 源地址
# 提交代码到远程源
git push 源名 分支名
# 克隆远程源
git clone 远程源地址
pull和push都可以提供选择不同的源,和不同的远程仓库交互。
八 采用ssh协议连接远程源
生成/添加SSH公钥:https://gitee.com/help/articles/4181
你可以按如下命令来生成 sshkey:
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
# Generating public/private ed25519 key pair...
注意: 这里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。现网的大部分教程均讲解的使用邮箱生成,其一开始的初衷仅仅是为了便于辨识所以使用了邮箱。
按照提示完成三次回车,即可生成 ssh key。会在C:\Users\用户\.ssh文件夹下生成公钥和私钥。
复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,添加生成的 public key 添加到仓库中。
添加后,在终端(Terminal)中输入
ssh -T git@gitee.com
首次使用需要确认并添加主机到本机SSH可信列表。若返回 Hi XXX! You’ve successfully authenticated, but Gitee.com does not provide shell access. 内容,则证明添加成功。
添加成功后,就可以使用SSH协议对仓库进行操作了。
九 协同开发
- 作为开发者,克隆仓库项目。
git clone 项目地址
- 保证自己本地有dev分支,且与远程仓库版本同步(没有就自己新建)。
- 本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互。
- 交互顺序:必须 先拉(pull)后提(push)。
- 必须切换到要交互的分支,在与远程同名的分支进行交互,如本地dev与远程dev交互。
git checkout dev git add . git commit -m '提交信息' git pull origin dev git push origin dev
十 冲突解决
10.1 多人同一分支开发产生冲突
出现冲突的原因:不同的人和你在同样的位置修改了代码,他先提交到远端仓库。你在提交的时候,先拉取代码,因为修改了相同地方的代码,产生了冲突。
解决:修改代码,如果功能一致,沟通出提交谁的代码。功能不一致,可都提交。修改完后,先提交到本地版本库,在推到远端。
10.2 分支合并产生冲突
- 新建dev分支并切换到dev分支
- 修改dev分支里的代码
- 提交到dev版本库
- 切换到master分支,修改相同地方的代码
- 提交到master版本库
- 在master分支上合并dev分支,会产生下面冲突
- 解决冲突,提交到版本库和远端。
十一 线上分支合并(pr mr)
-
在远端仓库创建分支(dev)。
-
把远程分支pull到本地。
-
本地div分支修改代码并提交到远端
-
远端远程分支合并
提交pr,mr申请。
-
审查通过,接受Pull Request即可合并。
十二 pycharm操作git
十三 为开源项目贡献代码
- 将开源项目fork到你的仓库。
- 克隆到本地,修改后提交到远程仓库。
- 提交pr,作者同意后就可以合并了。
十四 git相关
- 公司分支方案是什么样的?
有一个master主分支,用来发版的。开发者在dev分支开发,开发完一个版本在合到master分支上。还有一个bug分支,用来修改bug和发布小版本。 - git开发,遇到过冲突怎么解决?
在pull远程仓库的代码时,发生冲突,选择保留自己的或者别人的,提交到版本库,push到远程仓库。 - git 变基。
使用merge合并,这样就导致分支图就非常的难看了。所以就用了git rebase命令先进行变基,整个图就变成一条直线。把多次提交变成一次。 - git pull 和git fetch的区别。
pull是拉取并合并
fetch是拉取 - git flow。
git工作流 - git 的操作流程。
克隆远程仓库,编写代码,提交本地版本库,推到远程仓库。 - pr和mr。
提交合并分支的请求,在GitHub和gitee上叫pr,在gitlab上叫mr。