New

Git

Git是目前世界上最先进的分布式版本控制系统

Git作用

  • 版本控制
  • 协同开发

Git结构

整个结构可以分为:

  • 工作区用户在IDE或者本地目录中对文件进行添加、修改、删除操作
    • git add 文件或目录
    • git rm 文件
    • git checkout 文件
    通过上面的命令,将文件提交到缓冲区
  • 缓冲区表示个人开发的一个小阶段的完成仓库区中记录的各版本是可以查看并回退的但是在暂存区的版本一旦提交就再也没有了
    • git commit -m “备注”
    • git reset HEAD或版本号
    通过上面的操作可以对本地仓库进行操作
  • 本地仓库将用户分支上存储每天的工作代码
    • git push origin 分支 推送到远程仓库
    • git checkout dev
    • git pull

安装Git

sudo apt-get install git

安装成功查看命令git

本地操作

创建本地仓库

git init

会创建.git目录

配置用户信息

用户名

git config user.name yczbest

邮箱

git config user.email Rabbit@yczbest.cn

密码保存时间

记住密码(默认15分钟)

git config –global credential.helper cache

自定义记住时间(1小时)

git config credential.helper ‘cache –timeout~3600’

长期保存密码

git config –global credential.helper store

查看本地文件状态

git status

添加文件到本地暂存区(跟踪文件)

添加单个文件

git add 文件名

添加所有文件

git add .

提交到本地仓库

从暂存区上传到本地仓库git commit -m “注释”

查看日志

查看指针日志

可以查看到HEAD指针及其之前的版本信息git log

查看可参考的所有日志

可查看到所有历史版本信息。由于查看所有历史版本信息的目的,大多是为了进行版本回退或恢复操作所使用,从中找到所需的commit索引git reflog

版本回退

回退到上一版本

git reset –hard HEAD^

  • HEAD表示当前最新版本
  • HEAD^表示当前最新版本的前一个版本
  • HEAD^^表示当前最新版本的前两个版本,以此类推…
  • HEAD~1表示当前最新版本的前一个版本
  • HEAD~10表示当前最新版本的前10个版本,以此类推..

回退指定版本

git reset –hard 版本号

恢复暂存区文件到工作区

将文件从暂存区拉取到工作区,撤销当前的修改git checkout 文件名

撤销暂存区代码

git reset HEAD 文件名

添加本地仓库并提交

git commit -am “注释”

远程仓库操作

从远程仓库下载代码

git clone URL

上传代码到远程仓库

git push

从远程仓库拉取更新

git pull

多人协作开发流程

程序员A

克隆项目到本地

git clone url

进行开发

touch a.py

提交并推送

git commit -am “程序员A推送”
git push

程序员B

克隆项目到本地

git clone url

拉取修改

因为程序员A开发了,所以拉取更新

git pull

进行二次开发

vim a.py

提交并推送

git add .
git commit -m “程序员B二次开发”
git push

冲突

出现原因

当两个人同时对同一仓库、同一分支的同一文件进行修改时。

A修改后,B可能没有拉取更新内容,就进行了开发,当上传时,会发生冲突。

这个时候会发生冲突

解决方法

谁发生冲突谁解决

先拉取最新的内容,再进行修改

最后提交并推送至仓库

容易冲突的操作方式

  • 多个不同时操作了同一个文件
  • 一个人一直写不提交
  • 修改之前不更新最新代码
  • 提交之前不更新最新代码
  • 擅自修改同事代码

减少冲突的操作方式

  • 养成良好的操作习惯,先pull在修改,修改完立即commit 和push
  • 一定要确保自己正在修改的文件是最新版本的
  • 各自开发各自的模块
  • 如果要修改公共文件一定要先确认有没有人正在修改
  • 下班前一定要提交代码,上班第一件事拉取最新代码
  • 一定不要擅自修改同事的代码

Tag标签

一个大版本创建一个tag,可以解决项目日志太多不方便回退的问题

创建标签

git tag -a v1.0 -m “第一版”

创建标签在本地仓库,远程仓库中看不到

查看所有标签

git tag

推送指定标签版本到远程仓库

git push origin v1.0

删除标签

在本地仓库删除标签git tag -d v1.0

远程删除标签

git push –delete origin v1.0

分支

查看本地所有分支

git branch

默认只有一个master分支或者main分支

创建并切换本地分支

不存在的分支会自动创建git checkout -b login

在一个分支下写的代码,需要提交,再切换分支,这样不同的分支会有不同的代码文件

切换本地分支

git checkout 分支名

合并分支到主分支

git merge 分支名

删除本地分支

git branch -D 分支名

设置上游分支

当目前分支不是主分支(main),且没有上游分支时(远程服务器没有当前分支)会导致推送失败。

此时需要设置上游分支,将本地分支和远程分支对应起来

git push --set-upstream origin dev

或者

git push -u origin dev
git push origin 本地分支名:远程分支名

执行第二条后,如果远程分支不存在,会自动创建

SSH

生成公钥

ssh-keygen -t rsa -C ‘Rabbit@yczbest.cn’

添加公钥到本地

关闭SSL验证

git config –global http.sslVerify “false”

推送本地文件至远程仓库分支

将远程指定分支 拉取到 本地指定分支上:git pull origin <远程分支名>:<本地分支名>

git push 命令用于从将本地的分支版本上传到远程并合并。

命令格式如下:git push <远程主机名> <本地分支名>:<远程分支名>

如果本地分支名与远程分支名相同,则可以省略冒号:git push <远程主机名> <本地分支名>

.gitignore不生效的解决方法

原因是因为在git忽略目录中,新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中,就算是在.gitignore中已经声明了忽略路径也是不起作用的,

这时候我们就应该先把本地缓存删除,然后再进行git的提交,这样就不会出现忽略的文件了。

解决方法: git清除本地缓存(改变成未track状态),然后再提交:– 我直接重新来了。搞定[root@kevin ~]# git rm -r –cached .
[root@kevin ~]# git add .
[root@kevin ~]# git commit -m ‘update .gitignore’
[root@kevin ~]# git push -u origin master

git pull或clone出现fatal: refusing to merge unrelated histories

原因是两个分支是两个不同的版本,具有不同的提交历史git pull origin master –allow-unrelated-histories

可以允许不相关历史提,强制合并,

其他

创建本地dev分支,并指向dev分支

git checkout -b

本地分支关联远程分支

git branch --set-upstream-to=origin/<远程分支> <本地分支>

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇