最简洁的Git的基本操作

Git


前言:知道的越多,不知道的就越多

Git 与 SVN 区别

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

Git 与 SVN 区别点:

  • 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
  • **2、Git 把内容按元数据方式存储,而 SVN 是按文件:**所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
  • **3、Git 分支和 SVN 的分支不同:**分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
  • **4、Git 没有一个全局的版本号,而 SVN 有:**目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
  • **5、Git 的内容完整性要优于 SVN:**Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

下载

官网下载太慢了,用这个:https://npm.taobao.org/mirrors/git-for-windows/

安装

#进行全局配置
#用户名
git config --global user.name "cbbgs" 
#邮箱
git config --global user.email  "cbbgs@qq.com"  
#查看信息
git config -l

在这里插入图片描述

仓库

对应一个目录,这个目录的所有文件夹被 git管理起来。

仓库中的每一个文件的修改删除都会被git跟踪。

状态描述
已提交(commited)已提交表示数据以安全的保存在本地的数据库中
已修改(modified)已修改表示修改了文件,但还没有保存到数据库
已暂存(staged)已暂存表示已修改的文件当前版本做了标记。

基本命令

本地仓库

初始化仓库
# 初始化本地仓库,创建成功了会在目录下生成一个隐藏.git文件
git init
添加在暂存区
#添加所有文件到暂存区。
git add .
提交到数据库
#提交所有到本地仓库,留取一个备份
# -m message,信息
git commit -m "add a hello.java"


#将添加和提交一起执行
git commit -a -m "两步融为一步"

查看状态
#查看状态
git status
比较文件差异
# 比较文件差异
git diff -- git1.java


E:\git>git diff -- git1.java
diff --git a/git1.java b/git1.java
index c2d4b26..63d0a4d 100644
--- a/git1.java
+++ b/git1.java
@@ -1 +1,2 @@
-git 第二次提交
\ No newline at end of file
+git 第二次提交
+git 第三次提交
\ No newline at end of file

添加暂存区和撤销
# 添加暂存区
git add . #添加全部文件
git add hello.java  #添加指定文件

#撤销
git reset HEAD hello.java

E:\git>git reset HEAD git1.java
Unstaged changes after reset:
M       git1.java

查看日志
#查看日志
git log
#当版本太多的时候查看
git log --pretty=oneline

E:\git>git log --pretty=oneline
521dd712c8c4b73c62b6ca9d71dcf0b031a0718f (HEAD -> master) ddd"
b67367b2bdaa904b1b06c978ffcb6d5c4a4baec6 版本腿甲片
5af2a3acfe33705763e8f255b439af4bad2bc1e0 第三次提交
adde35935bf87f88e04a380324a50dedae754c91 'dierci'
503269f1a8143425de1589ea4e3d4edce5c2c03b '提交所有的文件'
8a08d8ce25fda3cfa33ddf3bc509ebd808ed3681 add a hello.java
版本回退
#回到上一个版本
git reset --hard HEAD~1  #1 就是回退几个版本

#查看版本字符串
git reflog

#实例
E:\git>git reflog
5af2a3a (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
b67367b HEAD@{1}: reset: moving to HEAD~1
521dd71 HEAD@{2}: reset: moving to HEAD~1
626c8f2 HEAD@{3}: commit: banbences
521dd71 HEAD@{4}: commit: ddd"
b67367b HEAD@{5}: commit: 版本腿甲片
5af2a3a (HEAD -> master) HEAD@{6}: commit: 第三次提交
adde359 HEAD@{7}: commit: 'dierci'
503269f HEAD@{8}: commit: '提交所有的文件'
8a08d8c HEAD@{9}: commit (initial): add a hello.java


#回退到指定的版本
git reset --hard  521dd71
本地恢复
#如果本地文件不小心被删除了,我们可以通过 git status查看状态

E:\git>git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    git1.java  #被删除的文件

no changes added to commit (use "git add" and/or "git commit -a")

#方式一
#然后通过restore恢复  resrtore 是把工作区恢复
git restore git1.java
#方式二
#可以通过checkout恢复  checkout 是从版本库拉取文件
git checkout git1.java
删除版本库
# 只需要在本地删除一些文件,然后提交修改,版本库也会做相应的修改
git add .

#第二种方式就是用rm
git rm git1.java

E:\git>git rm git1.java
rm 'git1.java'

#删除的版本可以通过版本回退恢复
git reset --hard HEAD~1  #1 就是回退几个版本

远程仓库

从gitee上拉取代码
#拉取gitee的 代码或者gitgub
# 以github为例 用 clone 跟上github地址   gitee一样的道理
git clone https://github.com/winterbe/java8-tutorial.git

#直接拉取远程仓库的最新状态
git pull 

将本地仓库的代码上传到gitee仓库
# 将本地代码上传到gitee上  第一次上传是需要输入用户名和密码
#  remote 远程仓库
# origin 远程仓库别名

#绑定远程仓库的地址
git   https://gitee.com/cbbgs/test1.git  #https 绑定

#拉取仓库
# git pull <远程主机名> <远程分支名>:<本地分支名> 
# 只有  git push  默认推主干,pull也一样

git push -u origin master
将本地仓库的代码上传到github仓库
git remote add origin git@github.com:cbbgs/test1.git
git push -u origin main


#
cd existing_git_repo
git remote add origin git@gitee.com:cbbgs/cloud-bookstore.git
git push -u origin master
配置 SSH
#配置秘钥
ssh-keygen -t rsa -C 'cbbgs@qq.com' 


E:\git>ssh-keygen -t rsa -C 'cbbgs@qq.com'
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\cbbgs/.ssh/id_rsa):
Created directory 'C:\Users\cbbgs/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\cbbgs/.ssh/id_rsa. #秘钥存放位置
Your public key has been saved in C:\Users\cbbgs/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:bbufYYjK6yw57DW9Qy8wxBzz3u0o6V9XJXESHf+aryE 'cbbgs@qq.com'
The key's randomart image is:
+---[RSA 2048]----+
|              ++o|
|      o        +o|
|     o +      . o|
|      + ..     .o|
|     . .S.o.    o|
|      o.oo.o.  + |
|   . .o+ooooE =  |
|    =+ o=.o+.= o |
|   ..+*oo=o.o ...|
+----[SHA256]-----+

E:\git>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
(img-F2Vs60O4-1626092826704)(img/3.png)]

配置公钥
在这里插入图片描述

检查连接

#检查连接   ssh -T git@github.com
ssh -T git@gitee.com
ssh上传
git remote add origin git@gitee.com:cbbgs/test2.git
git push -u origin master

Git分支操作

在这里插入图片描述

查看所有分支
#查看所有分支
git  branch
创建一个分支
#新建一个 分支并切换到新分支  带  * 是当前分支
git checkout -b cbbgs 

E:\git>git checkout -b cbbgs
Switched to a new branch 'cbbgs'

E:\git>git branch
* cbbgs
  master
切换分支
#切换分支  切换到主分支中 
git checkout master 
分支重命名
#分支重命名 b把cbbgs改成cbbgs1
git branch -m cbbgs cbbgs1

合并到主干
# 切回主干,在主干合并分支
git merge cbbgs1


E:\git>git branch
  cbbgs1
* master

E:\git>git merge cbbgs1
Updating 055edb7..e9464d8
Fast-forward
 git3.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 git3.txt
删除分支
#删除分支
git branch -d cbbgs1

总结:

git branch  #查看分支
git checkout #切换分支
git checkout -b name #新建分支并切换到新分支
git branch -d name #删除分支
git checkout -m newname #修改 分支
git merge branch name #合并分支
分支的远程操作

在这里插入图片描述

查看本地与远程分支
#查看本地与远程分支
git branch -a
推送本地分支的内容到远程仓库
#推送本地分支的内容到远程仓库
git push origin cbbgs1
# 查看远程仓库文件
git ls-files

创建其他本地分支并且拉取远程分支的内容
#删除本地的分支
git branch -d cbbgs1 

#此刻本地的分支只有master ,而远程的分支有两个
#查看远程的分支
git branch -a

$ git branch -a
* master
  remotes/origin/cbbgs1
  remotes/origin/master
#创建本地分支并且拉取远程分支的内容
# origin 远程
#git checkout -b 本地分支 origin/远程分支
git checkout -b cbbgs origin/cbbgs1

$ git checkout -b cbbgs origin/cbbgs1
Switched to a new branch 'cbbgs'
Branch 'cbbgs' set up to track remote branch 'cbbgs1' from 'origin'.

删除远程分支
#删除远程分支,但是本地分支还在 cbbgs1 远程分支名  
#删除远程分支和推送本地分支到远程仓库只有一个冒号的区别 #  #推送本地分支到远程仓库  git push orgin cbbgs1
git push origin :cbbgs1

$ git push origin :cbbgs1
Warning: Permanently added the ECDSA host key for IP address '180.97.125.228' to the list of known hosts.
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:cbbgs/test2.git
 - [deleted]         cbbgs1

分支冲突操作与解决

本地分支操作冲突

描述:当分支修改的本地文件地方与主分支修改的地方一摸一样,但是修改的内容不一样

(比如分支修改git1.java的第五行,主分支也是修改分支修改git1.java的第五行,)

这个时候在主分支合并的分支的 时候会发生冲突。

#在分支本地已经修改了文件
#分支提交到暂存区
cbbgs@cbbgs MINGW64 /e/git (cbbgs)
$ git add git1.java

#分支提交到本地仓库
cbbgs@cbbgs MINGW64 /e/git (cbbgs)
$ git commit -m "分支操作"
[cbbgs 0447b53] 分支操作
 1 file changed, 2 insertions(+), 1 deletion(-)
#切换到主分支
cbbgs@cbbgs MINGW64 /e/git (cbbgs)
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

#主分支本地修改文件,提交到仓库
cbbgs@cbbgs MINGW64 /e/git (master)
$ git commit -a -m "主干操作"
[master 9b714d3] 主干操作
 1 file changed, 2 insertions(+), 1 deletion(-)

#合并分支 
cbbgs@cbbgs MINGW64 /e/git (master)
$ git merge cbbgs
Auto-merging git1.java
CONFLICT (content): Merge conflict in git1.java
Automatic merge failed; fix conflicts and then commit the result. #产生了冲突

怎么解决?

人工解决!看具体的业务需求来修改本地的文件!

修改之后再进行提交。

#提交修改之后的主分支 分支没有改变
cbbgs@cbbgs MINGW64 /e/git (master|MERGING)
$ git commit -a -m "合并分支"
[master d71b4ed] 合并分支
查看分支合并图
查看分支合并图
git log --graph --pretty=online



cbbgs@cbbgs MINGW64 /e/git (master)
$ git log --graph --pretty=oneline
*   d71b4ed4c2429b8ed6fd8b32cf10da09e9869df3 (HEAD -> master) 合并分支
|\
| * 0447b53c711e983bb24eef143e5eaf00c0530097 (cbbgs) 分支操作
* | 9b714d3336f3531ac0359321d25b015043c04b29 主干操作
|/
* e9464d8a86eccdb50ed5ed684234e667ac6ef727 cbbgs提交
* 055edb7879008f77c682ca1748277112b501c57c (origin/master) add new

多人协同操作冲突

描述:一个新同事拉取远程项目,对项目进行修改,另一个同事也对项目进行修改,他两修改的地方和行数一模一样。向远程推送。

(比如分支修改git1.java的第五行,主分支也是修改分支修改git1.java的第五行,)

#c1 的操作

cbbgs@cbbgs MINGW64 /e/git (master)
$ git commit -a -m "c1提交"
[master dc34a8a] c1提交
 1 file changed, 1 insertion(+), 2 deletions(-)

cbbgs@cbbgs MINGW64 /e/git (master)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 353 bytes | 353.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:cbbgs/test2.git
   d71b4ed..dc34a8a  master -> master


# c2的操作
cbbgs@cbbgs MINGW64 /e/gittest/test2 (master)
$ git commit -a -m  "c2操作"
[master ad1c15b] c2操作
 1 file changed, 1 insertion(+), 2 deletions(-)

cbbgs@cbbgs MINGW64 /e/gittest/test2 (master)
$ git push
To gitee.com:cbbgs/test2.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'gitee.com:cbbgs/test2.git'    # 可以很明显看到c2推送失败了
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

怎么解决?

每次推送的时候要保证先拉取再推送一下

#c2先拉取 
$ git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 333 bytes | 17.00 KiB/s, done.
From gitee.com:cbbgs/test2
   d71b4ed..dc34a8a  master     -> origin/master
Auto-merging git1.java
CONFLICT (content): Merge conflict in git1.java
Automatic merge failed; fix conflicts and then commit the result.  #拉取也报冲突

在这里插入图片描述

现在c2的文件变成了这样,现在我们手动修改一下

#修改之后c2再推送
cbbgs@cbbgs MINGW64 /e/gittest/test2 (master|MERGING)
$ git commit -a -m  "c2操作"
[master 8aac46e] c2操作

cbbgs@cbbgs MINGW64 /e/gittest/test2 (master)
$ git push
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 653 bytes | 653.00 KiB/s, done.
Total 6 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:cbbgs/test2.git
   dc34a8a..8aac46e  master -> master  # 推送成功

标签管理

在这里插入图片描述

查看标签
#查看标签
git tag
新建标签
#新建标签
git tag v1.0
#新建标签并添加说明
git tag -a v2.0 -m "发布2.0版本"
将标签推到远程
#将标签推到远程
git push origin  v1.0

cbbgs@cbbgs MINGW64 /e/git (master)
$ git push origin v1.0
Enumerating objects: 19, done.
Counting objects: 100% (19/19), done.
Delta compression using up to 8 threads
Compressing objects: 100% (17/17), done.
Writing objects: 100% (19/19), 1.83 KiB | 374.00 KiB/s, done.
Total 19 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:cbbgs/test2.git
 * [new tag]         v1.0 -> v1.0


#推送本地所有标签
git push origin --tag


cbbgs@cbbgs MINGW64 /e/git (master)
$ git push origin --tag
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 166 bytes | 166.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:cbbgs/test2.git
 * [new tag]         v2.0 -> v2.0

在这里插入图片描述

删除标签
#删除远程标 但是本地标签还在
git push origin :refs/tags/v1.0


cbbgs@cbbgs MINGW64 /e/git (master)
$ git push origin :refs/tags/v1.0
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:cbbgs/test2.git
 - [deleted]         v1.0
 
 #删除本地标签
 git tag -d v1.0
 
 cbbgs@cbbgs MINGW64 /e/git (master)
$  git tag -d v1.0
Deleted tag 'v1.0' (was dc34a8a)

在这里插入图片描述

Idea 下的git操作

1、配置git

在这里插入图片描述

2、拉取项目

在这里插入图片描述

在这里插入图片描述

3、把一个普通项目添加成git管理

在这里插入图片描述

添加之后这个项目就有了
在这里插入图片描述

添加暂存区

在这里插入图片描述

添加到本地仓库

在这里插入图片描述
在这里插入图片描述

4、推送到远程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、分支操作

在这里插入图片描述

提交分支一样

在这里插入图片描述

拉取远程的分支

先拉取项目最新状态

在这里插入图片描述
在这里插入图片描述

6、合并分支

先切换到主干
在这里插入图片描述
在这里插入图片描述

合并了cbbgs2的内容

7、删除。简单

8、忽略配置文件.idea

上传的时候不勾选就可以了

安装插件 .ignore

9、冲突的出现和解决

本地仓库分支合并冲突,手动解决

在这里插入图片描述
在这里插入图片描述

远程的冲突解决

一样的

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈斌-cb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值