首页 > 其他 > 详细

010_Git

时间:2021-06-07 20:36:29      阅读:50      评论:0      收藏:0      [点我收藏+]

目录

版本控制

什么是版本控制

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。

技术分享图片

版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。

技术分享图片
技术分享图片
技术分享图片
技术分享图片

常见版本控制工具

技术分享图片

版本控制分类

技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片

Git与SVN的区别

技术分享图片

Git历史

技术分享图片
技术分享图片

Git下载安装

下载

Git官网:http://git-scm.com/
官网下载速度太慢,可以去找镜像下载
淘宝镜像:http://npm.taobao.org/mirrors/git-for-windows/
技术分享图片
技术分享图片
选择最新的稳定版下载
技术分享图片
选择电脑对应的版本
技术分享图片

如果有Git,先卸载Git

删除环境变量

技术分享图片

卸载Git

技术分享图片

安装

技术分享图片
技术分享图片
技术分享图片
无需改变,默认安装
技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片
安装成功

安装完成后环境变量会自动添加

技术分享图片

启动

技术分享图片

  1. 开始菜单

技术分享图片

  1. 任意文件夹下右键

技术分享图片
技术分享图片

Git环境配置

Git相关配置文件

技术分享图片

查看配置 git config -l

git config -l

技术分享图片

查看系统配置 git config --system --list

git config --system --list

技术分享图片

查看用户配置 git config --global --list

git config --global --list

技术分享图片

设置用户配置(用户名和email)(必须)

技术分享图片
技术分享图片

git config --global user.name "wl3pbzhyq"
git config --global user.email "wl3pbzhyq@163.com"

技术分享图片

Linux常用命令

技术分享图片

Git基本理论

工作区域

技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片

工作流程

技术分享图片
技术分享图片

Git项目搭建

创建工作目录与常用指令

技术分享图片
技术分享图片

本地仓库搭建

技术分享图片

创建新仓库

技术分享图片

git init

技术分享图片

克隆远程仓库

技术分享图片

git clone https://gitee.com/kuangstudy/openclass.git

技术分享图片

Git文件操作

文件4种状态

技术分享图片

查看文件状态

技术分享图片

提交文件

#查看指定文件状态
git status hello.txt
#查看所有文件状态
git status
#提交所有变化
git add -A  
#提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add -u
#提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add .
#提交暂存区的内容到本地仓库 -m 提交信息
git commit -m "new file hello.txt"
Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01
$ git init
Initialized empty Git repository in D:/code/gitcode/demo01/.git/

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01 (main)
$ ls -a
./  ../  .git/

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01 (main)
$ git status
On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01 (main)
$ touch hello.txt

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01 (main)
$ git status
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.txt

nothing added to commit but untracked files present (use "git add" to track)

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01 (main)
$ git add .

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01 (main)
$ git status
On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   hello.txt


Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01 (main)
$ git commit -m "new file hello.txt"
[main (root-commit) 097ac08] new file hello.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hello.txt

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01 (main)
$ git status
On branch main
nothing to commit, working tree clean

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitcode/demo01 (main)

忽略文件

技术分享图片
技术分享图片
技术分享图片

使用码云

技术分享图片

注册码云,完善个人信息

官网:https://gitee.com/
技术分享图片
技术分享图片

设置本机绑定SSH公钥,实现免密码登录

进入C:\Users\Administrator.ssh,生成公钥和私钥

# -t 加密模式 rsa和dsa
# -C email
ssh-keygen -t rsa -C "wl3pbzhyq@163.com"
Administrator@L87Y12K91TH8M2R MINGW64 ~/.ssh
$ pwd
/c/Users/Administrator/.ssh

Administrator@L87Y12K91TH8M2R MINGW64 ~/.ssh
$ ssh-keygen -t rsa -C "wl3pbzhyq@163.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:M7WQMPRd1+enQUZjboyY8Zj+4WQZfF83S2yfhYl5Nl4 wl3pbzhyq@163.com
The key‘s randomart image is:
+---[RSA 3072]----+
|     .+   . ..=. |
|       + o X O++o|
|        + B Bo@*E|
|         + . O++@|
|        S o = .=+|
|         o = ..  |
|            o    |
|                 |
|                 |
+----[SHA256]-----+

Administrator@L87Y12K91TH8M2R MINGW64 ~/.ssh
$ ll
total 5
-rw-r--r-- 1 Administrator 197121 2602 Apr 15 23:34 id_rsa
-rw-r--r-- 1 Administrator 197121  571 Apr 15 23:34 id_rsa.pub

Administrator@L87Y12K91TH8M2R MINGW64 ~/.ssh

技术分享图片

复制公钥id_rsa.pub内容到gitee

技术分享图片
技术分享图片


技术分享图片

使用码云创建一个自己的仓库

技术分享图片
技术分享图片
技术分享图片

克隆远程仓库到本地 git clone

技术分享图片

Administrator@L87Y12K91TH8M2R MINGW64 /d/code
$ git clone https://gitee.com/wl3pbzhyq/gitdemo.git
Cloning into ‘gitdemo‘...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), 13.28 KiB | 6.64 MiB/s, done.

Administrator@L87Y12K91TH8M2R MINGW64 /d/code

Git常用命令

https://gitee.com/all-about-git

仓库

# 在当前目录新建一个Git代码库
$ git init

# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]

# 下载一个项目和它的整个代码历史
$ git clone [url]

配置

# 显示当前的Git配置
$ git config --list

# 编辑Git配置文件
$ git config -e [--global]

# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

增加/删除文件

# 添加指定文件到暂存区
$ git add [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录
$ git add [dir]

# 添加当前目录的所有文件到暂存区
$ git add .

# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p

# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...

# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]

# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

代码提交

# 提交暂存区到仓库区
$ git commit -m [message]

# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a

# 提交时显示所有diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...

分支

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 列出所有本地分支和远程分支
$ git branch -a

# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]

# 新建一个分支,并切换到该分支
$ git checkout -b [branch]

# 新建一个分支,指向指定commit
$ git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 切换到上一个分支
$ git checkout -

# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

标签

# 列出所有tag
$ git tag

# 新建一个tag在当前commit
$ git tag [tag]

# 新建一个tag在指定commit
$ git tag [tag] [commit]

# 删除本地tag
$ git tag -d [tag]

# 删除远程tag
$ git push origin :refs/tags/[tagName]

# 查看tag信息
$ git show [tag]

# 提交指定tag
$ git push [remote] [tag]

# 提交所有tag
$ git push [remote] --tags

# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

查看信息

# 显示有变更的文件
$ git status

# 显示当前分支的版本历史
$ git log

# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat

# 搜索提交历史,根据关键词
$ git log -S [keyword]

# 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s

# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature

# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]

# 显示指定文件相关的每一次diff
$ git log -p [file]

# 显示过去5次提交
$ git log -5 --pretty --oneline

# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn

# 显示指定文件是什么人在什么时间修改过
$ git blame [file]

# 显示暂存区和工作区的差异
$ git diff

# 显示暂存区和上一个commit的差异
$ git diff --cached [file]

# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD

# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]

# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"

# 显示某次提交的元数据和内容变化
$ git show [commit]

# 显示某次提交发生变化的文件
$ git show --name-only [commit]

# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]

# 显示当前分支的最近几次提交
$ git reflog

远程同步

# 下载远程仓库的所有变动
$ git fetch [remote]

# 显示所有远程仓库
$ git remote -v

# 显示某个远程仓库的信息
$ git remote show [remote]

# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]

# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]

# 上传本地指定分支到远程仓库
$ git push [remote] [branch]

# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force

# 推送所有分支到远程仓库
$ git push [remote] --all

撤销

# 恢复暂存区的指定文件到工作区
$ git checkout [file]

# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]

# 恢复暂存区的所有文件到工作区
$ git checkout .

# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]

# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard

# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]

# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]

# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]

# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]

暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop

IDEA中集成Git

创建远程仓库

技术分享图片

IDEA创建项目

技术分享图片

在项目目录打开Git Bash,创建本地仓库

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitdemo
$ git init
Initialized empty Git repository in D:/code/gitdemo/.git/

Administrator@L87Y12K91TH8M2R MINGW64 /d/code/gitdemo (main)

技术分享图片

IDEA配置Git命令

技术分享图片

关联远程仓库

git remote add origin git@gitee.com:wl3pbzhyq/gitdemo.git

技术分享图片

pull远程仓库到本地

git pull origin master
D:\code\gitdemo>git pull origin master
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), 13.26 KiB | 43.00 KiB/s, done.
From gitee.com:wl3pbzhyq/gitdemo
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master

D:\code\gitdemo>

配置忽略文件,忽略.idea目录

# target
target/

# idea
.idea/
*.iml

技术分享图片

提交文件

#查看指定文件状态
git status hello.txt
#查看所有文件状态
git status
#提交所有变化
git add -A  
#提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add -u
#提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add .
#提交暂存区的内容到本地仓库 -m 提交信息
git commit -m "new file hello.txt"

查看文件状态

D:\code\gitdemo>git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   .gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        pom.xml
        src/

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

D:\code\gitdemo>

提交文件到暂存区

D:\code\gitdemo>git add -A
warning: LF will be replaced by CRLF in src/main/webapp/WEB-INF/web.xml.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in src/main/webapp/index.jsp.
The file will have its original line endings in your working directory

D:\code\gitdemo>git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   .gitignore
        new file:   pom.xml
        new file:   src/main/webapp/WEB-INF/web.xml
        new file:   src/main/webapp/index.jsp


D:\code\gitdemo>

提交暂存区文件到本地仓库

D:\code\gitdemo>git commit -m "忽略文件修改;pom.xml和src初始化添加"
[main 118a13c] 忽略文件修改;pom.xml和src初始化添加
 4 files changed, 82 insertions(+)
 create mode 100644 pom.xml
 create mode 100644 src/main/webapp/WEB-INF/web.xml
 create mode 100644 src/main/webapp/index.jsp

D:\code\gitdemo>

push推送本地仓库新分支到远程仓库

D:\code\gitdemo>git push --set-upstream origin main
Enumerating objects: 12, done.
Counting objects: 100% (12/12), done.
Delta compression using up to 4 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (10/10), 1.59 KiB | 148.00 KiB/s, done.
Total 10 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
remote: Create a pull request for ‘main‘ on Gitee by visiting:
remote:     https://gitee.com/wl3pbzhyq/gitdemo/pull/new/wl3pbzhyq:main...wl3pbzhyq:master
To gitee.com:wl3pbzhyq/gitdemo.git
 * [new branch]      main -> main
Branch ‘main‘ set up to track remote branch ‘main‘ from ‘origin‘.

D:\code\gitdemo>

技术分享图片

添加文件并提交到本地仓库

D:\code\gitdemo>git status
On branch main
Your branch is up to date with ‘origin/main‘.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   src/main/java/com/qing/demo01/GitDemo01.java


D:\code\gitdemo>git add -A

D:\code\gitdemo>git commit -m "添加GitDemo.java"
[main 539fb6b] 添加GitDemo.java
 1 file changed, 4 insertions(+)
 create mode 100644 src/main/java/com/qing/demo01/GitDemo01.java

D:\code\gitdemo>

push推送本地仓库到远程仓库

D:\code\gitdemo>git push
Enumerating objects: 12, done.
Counting objects: 100% (12/12), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (9/9), 602 bytes | 86.00 KiB/s, done.
Total 9 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:wl3pbzhyq/gitdemo.git
   118a13c..539fb6b  main -> main

D:\code\gitdemo>

技术分享图片

Git分支

创建分支

D:\code\gitdemo>git branch bugFix

切换分支

D:\code\gitdemo>git checkout bugFix
D:\code\gitdemo>git branch
* bugFix
  main

push推送本地仓库新分支到远程仓库

D:\code\gitdemo> git push --set-upstream origin bugFix
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
remote: Create a pull request for ‘bugFix‘ on Gitee by visiting:
remote:     https://gitee.com/wl3pbzhyq/gitdemo/pull/new/wl3pbzhyq:bugFix...wl3pbzhyq:master
To gitee.com:wl3pbzhyq/gitdemo.git
 * [new branch]      bugFix -> bugFix
Branch ‘bugFix‘ set up to track remote branch ‘bugFix‘ from ‘origin‘.

修改文件,并提交到本地仓库

D:\code\gitdemo>git status
On branch bugFix
Your branch is up to date with ‘origin/bugFix‘.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   src/main/java/com/qing/demo01/GitDemo01.java


D:\code\gitdemo>git commit -m "GitDemo01.java的bug修复"
[bugFix a99918c] GitDemo01.java的bug修复
 1 file changed, 3 insertions(+)

push推送本地仓库到远程仓库

D:\code\gitdemo>git push
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (9/9), 649 bytes | 92.00 KiB/s, done.
Total 9 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:wl3pbzhyq/gitdemo.git
   539fb6b..a99918c  bugFix -> bugFix

合并bugFix分支到main分支

D:\code\gitdemo>git checkout main
Switched to branch ‘main‘
Your branch is up to date with ‘origin/main‘.

D:\code\gitdemo>git merge bugFix
Updating 539fb6b..a99918c
Fast-forward
 src/main/java/com/qing/demo01/GitDemo01.java | 3 +++
 1 file changed, 3 insertions(+)

D:\code\gitdemo>

010_Git

原文:https://www.cnblogs.com/wl3pb/p/14860073.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!