git使用

git使用

  • 一 下载安装
  • 二 git工作流程
  • 三 基础命令
  • 四 忽略文件
  • 五 多分支开发
  • 六 git远程仓库
  • 七 remote源操作
  • 八 采用ssh协议连接远程源
  • 九 协同开发
  • 十 冲突解决
    • 10.1 多人同一分支开发产生冲突
    • 10.2 分支合并产生冲突
  • 十一 线上分支合并(pr mr)
  • 十二 pycharm操作git
  • 十三 为开源项目贡献代码
  • 十四 git相关

一 下载安装

官网下载安装:https://git-scm.com/downloads

二 git工作流程

git使用_第1张图片

三 基础命令

在要托管的文件夹下右击以Git Bash Here打开
git使用_第2张图片

将文件夹初始化为git仓库

git init

git使用_第3张图片
初始化成功后会多一个.git文件夹

** 设置全局用户**

git config --global user.name '用户名'
git config --global user.email '用户邮箱'

C:\Users\用户文件夹.gitconfig新建用户信息,在所有仓库下都可以使用。
git使用_第4张图片

设置局部用户

git config user.name '用户名'
git config  user.email '用户邮箱'

在当前仓库下的config新建用户信息,只能在当前仓库下使用。

注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户。

git使用_第5张图片
查看仓库状态

当仓库中有文件增加、删除、修改,都可以在仓库状态中查看。

空文件夹不会被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使用_第6张图片
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仓库
git使用_第7张图片
连接远程仓库
git使用_第8张图片
git使用_第9张图片
第一次push需要输入gitee账号和密码,以后就不用了。输入的信息永久保存在Windows凭据里。
git使用_第10张图片

新建不是空的gitee仓库
git使用_第11张图片
先将远程仓库克隆到本地

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 "[email protected]"  
# Generating public/private ed25519 key pair...

git使用_第12张图片

注意: 这里的 [email protected] 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。现网的大部分教程均讲解的使用邮箱生成,其一开始的初衷仅仅是为了便于辨识所以使用了邮箱。

按照提示完成三次回车,即可生成 ssh key。会在C:\Users\用户\.ssh文件夹下生成公钥和私钥。

git使用_第13张图片
复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,添加生成的 public key 添加到仓库中。
git使用_第14张图片

添加后,在终端(Terminal)中输入

ssh -T [email protected]

首次使用需要确认并添加主机到本机SSH可信列表。若返回 Hi XXX! You’ve successfully authenticated, but Gitee.com does not provide shell access. 内容,则证明添加成功。
git使用_第15张图片

添加成功后,就可以使用SSH协议对仓库进行操作了。

九 协同开发

  1. 作为开发者,克隆仓库项目。
    git clone 项目地址
    
  2. 保证自己本地有dev分支,且与远程仓库版本同步(没有就自己新建)。
  3. 本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互。
  4. 交互顺序:必须 先拉(pull)后提(push)。
  5. 必须切换到要交互的分支,在与远程同名的分支进行交互,如本地dev与远程dev交互。
    git checkout dev
    git add .
    git commit -m '提交信息'
    git pull origin dev
    git push origin dev
    

十 冲突解决

10.1 多人同一分支开发产生冲突

出现冲突的原因:不同的人和你在同样的位置修改了代码,他先提交到远端仓库。你在提交的时候,先拉取代码,因为修改了相同地方的代码,产生了冲突。

解决:修改代码,如果功能一致,沟通出提交谁的代码。功能不一致,可都提交。修改完后,先提交到本地版本库,在推到远端。

10.2 分支合并产生冲突

  1. 新建dev分支并切换到dev分支
  2. 修改dev分支里的代码
  3. 提交到dev版本库
  4. 切换到master分支,修改相同地方的代码
  5. 提交到master版本库
  6. 在master分支上合并dev分支,会产生下面冲突
    git使用_第16张图片
  7. 解决冲突,提交到版本库和远端。

十一 线上分支合并(pr mr)

  1. 在远端仓库创建分支(dev)。
    git使用_第17张图片

  2. 把远程分支pull到本地。
    git使用_第18张图片

  3. 本地div分支修改代码并提交到远端
    git使用_第19张图片

  4. 远端远程分支合并
    提交pr,mr申请。
    git使用_第20张图片

  5. 审查通过,接受Pull Request即可合并。
    git使用_第21张图片

十二 pycharm操作git

git使用_第22张图片

git使用_第23张图片

十三 为开源项目贡献代码

  1. 将开源项目fork到你的仓库。
  2. 克隆到本地,修改后提交到远程仓库。
  3. 提交pr,作者同意后就可以合并了。

十四 git相关

  1. 公司分支方案是什么样的?
    有一个master主分支,用来发版的。开发者在dev分支开发,开发完一个版本在合到master分支上。还有一个bug分支,用来修改bug和发布小版本。
  2. git开发,遇到过冲突怎么解决?
    在pull远程仓库的代码时,发生冲突,选择保留自己的或者别人的,提交到版本库,push到远程仓库。
  3. git 变基。
    使用merge合并,这样就导致分支图就非常的难看了。所以就用了git rebase命令先进行变基,整个图就变成一条直线。把多次提交变成一次。
  4. git pull 和git fetch的区别。
    pull是拉取并合并
    fetch是拉取
  5. git flow。
    git工作流
  6. git 的操作流程。
    克隆远程仓库,编写代码,提交本地版本库,推到远程仓库。
  7. pr和mr。
    提交合并分支的请求,在GitHub和gitee上叫pr,在gitlab上叫mr。

你可能感兴趣的:(git,github)