Git

文章目录

  • Git
    • Git 与 SVN 区别
    • 下载
    • 安装
    • 仓库
    • 基本命令
      • 本地仓库
        • 初始化仓库
        • 添加在暂存区
        • 提交到数据库
        • 查看状态
        • 比较文件差异
        • 添加暂存区和撤销
        • 查看日志
        • 版本回退
        • 本地恢复
        • 删除版本库
      • 远程仓库
        • 从gitee上拉取代码
        • 将本地仓库的代码上传到gitee仓库
        • 将本地仓库的代码上传到github仓库
        • 配置 SSH
          • ssh上传
      • Git分支操作
        • 查看所有分支
        • 创建一个分支
        • 切换分支
        • 分支重命名
        • 合并到主干
        • 删除分支
        • 分支的远程操作
          • 查看本地与远程分支
          • 推送本地分支的内容到远程仓库
          • 创建其他本地分支并且拉取远程分支的内容
          • 删除远程分支
    • 分支冲突操作与解决
      • 本地分支操作冲突
        • 查看分支合并图
      • 多人协同操作冲突
    • 标签管理
      • 查看标签
      • 新建标签
      • 将标签推到远程
      • 删除标签
    • Idea 下的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.javaE:\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.javaE:\git>git reset HEAD git1.java
Unstaged changes after reset:
M       git1.java

查看日志

#查看日志
git log
#当版本太多的时候查看
git log --pretty=onelineE:\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.javaE:\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>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置公钥

检查连接

#检查连接   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
* cbbgsmaster
切换分支
#切换分支  切换到主分支中
git checkout master
分支重命名
#分支重命名 b把cbbgs改成cbbgs1
git branch -m cbbgs cbbgs1
合并到主干
# 切回主干,在主干合并分支
git merge cbbgs1E:\git>git branchcbbgs1
* masterE:\git>git merge cbbgs1
Updating 055edb7..e9464d8
Fast-forwardgit3.txt | 01 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
* masterremotes/origin/cbbgs1remotes/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=onlinecbbgs@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.gitd71b4ed..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/test2d71b4ed..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.gitdc34a8a..8aac46e  master -> master  # 推送成功

标签管理

查看标签

#查看标签
git tag

新建标签

#新建标签
git tag v1.0
#新建标签并添加说明
git tag -a v2.0 -m "发布2.0版本"

将标签推到远程

#将标签推到远程
git push origin  v1.0cbbgs@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 --tagcbbgs@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.0cbbgs@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.0cbbgs@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、冲突的出现和解决

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


远程的冲突解决

一样的

最简洁的Git的基本操作相关推荐

  1. Git简单基本操作指令集合

    Git简单基本操作指令集合 常用置顶 新添加到暂存区中文件前面有绿色的 A 标记 (这是精简的方式查询出来的状态 git status -s), 非精简方式查询出来的是 文件名全绿色的 修改过的.没有 ...

  2. Git GUI基本操作

    一.Git GUI基本操作 1.版本库初始化 gitpractise文件夹就变成了Git可以管理的仓库,目录下多了一个.git文件夹,此目录是Git用于管理版本库的,不要擅自改动里面的文件,这样会破坏 ...

  3. git学习笔记——Linux和Windows下git的基本操作

    git学习笔记--Linux和Windows下git的基本操作 github主页:https://github.com/Taot-chen 一.Linux环境 1.安装git sudo apt-get ...

  4. Git 笔记:基本操作工作流程

    1 git 工作流程 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修改. 提交修改. 在修改完成后,如果发现错 ...

  5. Git 学习札记(二)安装git以及基本操作

    Git 学习札记(二) Linux上的Git基本操作 安装和使用 Git 在linux安装git的命令: sudo apt-get install git 结果如图:(为了截这个图特意卸载了又装了一遍 ...

  6. 3.Git的基本操作

    一.Git的基本工作流程(本地仓库) 二.Git命令行操作(应用) 三.历史版本切换(理解) 1.准备工作 (1) 查看my_project 文件夹的log日志 git reflog :可以查看所有分 ...

  7. git客户端基本操作

    首先下载git 一路next安装好了之后,打开任意盘符,右键打开git bash here 首先:初始首次的用户名和邮箱,之后就不用了. git config --global user.name & ...

  8. 你必须学会的Git入门基本操作

    Git简介 Git不仅仅是实际项目开发中进行代码管理的神器,也是你在天码营学习需要掌握的工具. Git是一种代码版本控制工具.我们在实际项目中和天码营的学习过程中都会产生大量的项目代码,Git可以帮助 ...

  9. GIT的基本操作(建立自己的git远程仓库)

    文章目录 先在远程主机建立git仓库 进入git仓库,建立不用更新的文件(.gitignore) git操作 远程克隆到本地 本地建立新文件后提交 本地仓库推到远程仓库 本地仓库更新 查看当前仓库状态 ...

最新文章

  1. svn通讯协议_【SVN】——svn协议和http协议
  2. mysql模糊查询 汉字为何不起作用_mysql中文模糊查询遇到的有关问题,各位救急...
  3. 【好文推荐】springmvc教程下载
  4. SAP Freestyle UI5 和 SAP Fiori Elements 应用的区别
  5. css-阴影和超链接伪类
  6. 3.过滤——相关滤波(Correlation Filtering)_3
  7. Potted Flower(线段树+dp)
  8. python创建txt文件并写入-python如何将数据写入本地txt文本文件
  9. 简单比较init-method,afterPropertiesSet和BeanPostProcessor
  10. 该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。
  11. 【利用编程来解决问题】——解数学题
  12. 警惕Linux的传销投机属性,恢复建立契约商业化社会秩序。
  13. matlab期末题库,Matlab-期末考试题库(共12套卷)
  14. 如何做好国产三维CAD软件的研发?
  15. java使用正则表达式获取字符串中的所有英文单词或数字
  16. 三农数据(1996-2020)十六:农产品进出口、农村居民纯收入、消费支出及结构
  17. 【FTP】FTP主动模式与被动模式
  18. 如何优雅地使用Sublime
  19. 锐捷交换机配置ssh password登录命令
  20. pci总线协议学习笔记——PCI总线基本概念

热门文章

  1. origin如何绘制双y轴曲线_origin怎样画双y轴 看完恍然大悟
  2. 如何安装或卸载Google Chrome浏览器
  3. java 订单减库存_下单减库存
  4. 黑马程序员--java基础--集合(三)
  5. R2S设置openWrt软路由
  6. 相对路径./ ../ /解释
  7. 我参加第七届NVIDIA Sky Hackathon——训练CV模型
  8. 【毕业设计】基于卷积神经网络的植物花卉识别系统
  9. 密码加盐(salt)
  10. 跨国药企在中国 | 京东健康与卫材成立合资公司;西门子医疗、富士胶片参展中国国际医疗器械展...