版本控制——Git+GitHub

1. git下载、安装

C:\Users\xxx>git
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

2. git相关操作

  • git 本地结构:
    • 工作区:你写代码的区域
    • 暂存区:暂时存放没有提交的代码的区域
    • 本地库:存放提交的代码的各个版本
      在这里插入图片描述

2.1 本地库初始化

  • 桌面 — 右键 — git bash here
  • 使用linux命令进行操作
# 切换到工作区
主机名 MINGW64 ~/Desktop
$ cd d:

主机名 MINGW64 /d/GitProject (master)
$ mkdir newPro

主机名 MINGW64 /d/GitProject (master)
$ cd newPro/

# 新创建的项目文件夹为空
主机名 MINGW64 /d/GitProject/newPro (master)
$ ll
total 0
ls
主机名 MINGW64 /d/GitProject/newPro (master)
$ ls -lA
total 0

# 初始化,生成的.git目录是隐藏的
主机名 MINGW64 /d/GitProject/newPro (master)
$ git init
Initialized empty Git repository in D:/GitProject/newPro/.git/

主机名 MINGW64 /d/GitProject/newPro (master)
$ ll
total 0

主机名 MINGW64 /d/GitProject/newPro (master)
$ ls -lA
total 4
drwxr-xr-x 1 18379 197609 0 10月 18 13:16 .git/

# .git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改
主机名 MINGW64 /d/GitProject/newPro (master)
$ ll .git/
total 7
-rw-r--r-- 1 18379 197609 130 10月 18 13:16 config
-rw-r--r-- 1 18379 197609  73 10月 18 13:16 description
-rw-r--r-- 1 18379 197609  23 10月 18 13:16 HEAD
drwxr-xr-x 1 18379 197609   0 10月 18 13:16 hooks/
drwxr-xr-x 1 18379 197609   0 10月 18 13:16 info/
drwxr-xr-x 1 18379 197609   0 10月 18 13:16 objects/
drwxr-xr-x 1 18379 197609   0 10月 18 13:16 refs/

2.2 设置用户签名

  • 形式
    • 用户名:tom
    • Email 地址:goodMorning@atguigu.com
  • 作用:区分不同开发人员身份
  • 项目级别/仓库级别:仅在当前本地库范围内有效(如果存在该级别,就优先使用该级别
# 配置用户名
git config user.name tom_pro  
# 配置邮箱
git config user.email goodMorning_pro@atguigu.com
  • 系统用户级别:登陆当前操作系统的用户范围内有效(通常只配置用户级别
# 配置用户名
git config --global user.name tom_glb  
# 配置邮箱
git config --global user.email goodMorning_glb@atguigu.com
  • 查看 .git/config 文件
主机名 MINGW64 /d/GitProject/newPro (master)
$ git config user.name tom_pro

主机名 MINGW64 /d/GitProject/newPro (master)
$ git config user.email goodmorning_pro@atguigu.com

主机名 MINGW64 /d/GitProject/newPro (master)
$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[user]
        name = tom_pro
        email = goodmorning_pro@atguigu.com

2.3 基本命令操作

2.3.1 查看状态:git status

主机名 MINGW64 /d/GitProject/newPro (master)
$ git status
On branch master

No commits yet

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

# 工作区新增文件
主机名 MINGW64 /d/GitProject/newPro (master)
$ vim good.txt

主机名 MINGW64 /d/GitProject/newPro (master)
$ git status
On branch master

No commits yet

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

        good.txt

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

2.3.2 将工作区的“新建/修改”添加到暂存区:git add

主机名 MINGW64 /d/GitProject/newPro (master)
$ git add good.txt
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory

主机名 MINGW64 /d/GitProject/newPro (master)
$ git status
On branch master

No commits yet

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

        new file:   good.txt


# 撤销对good.txt文件的添加操作
主机名 MINGW64 /d/GitProject/newPro (master)
$ git rm --cached good.txt
rm 'good.txt'

主机名 MINGW64 /d/GitProject/newPro (master)
$ git status
On branch master

No commits yet

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

        good.txt

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

主机名 MINGW64 /d/GitProject/newPro (master)
$ git add good.txt
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory

2.3.3 将暂存区的内容提交到本地库:git commit -m “commit message” [file name]

# 使用 git commit 会进入vim 编辑器,输入 commit message
主机名 MINGW64 /d/GitProject/newPro (master)
$ git commit good.txt
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory
[master (root-commit) 63ce33b] This is my first commit.Create a new file.# 输入的 commit message
 1 file changed, 11 insertions(+)# 1个文件被修改,新插入11行
 create mode 100644 good.txt# create模式

主机名 MINGW64 /d/GitProject/newPro (master)
$ git status
On branch master
nothing to commit, working tree clean

# 对文件做出修改
主机名 MINGW64 /d/GitProject/newPro (master)
$ vim good.txt

主机名 MINGW64 /d/GitProject/newPro (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)# 撤销修改

        modified:   good.txt
# git add + git commit 或者 git commit -a
no changes added to commit (use "git add" and/or "git commit -a")

主机名 MINGW64 /d/GitProject/newPro (master)
$ git add good.txt
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory

主机名 MINGW64 /d/GitProject/newPro (master)
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   good.txt

# 使用带参数的git commit
主机名 MINGW64 /d/GitProject/newPro (master)
$ git commit -m "My second commit,modify good.txt" good.txt
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory
[master 219f9cf] My second commit,modify good.txt# 输入的 commit message
 1 file changed, 1999 insertions(+), 1 deletion(-)# 1个文件被修改,新插入1999行,删除1行 

2.3.4 查看历史记录:git log

# 查看详细记录
主机名 MINGW64 /d/GitProject/newPro (master)
$ git log
commit 219f9cf9a99ce6801db2b0af3fe38ef71e0b96d1 (HEAD -> master)
Author: tom_pro <goodmorning_pro@atguigu.com>
Date:   Mon Oct 19 10:38:29 2020 +0800

    My second commit,modify good.txt

commit 63ce33b7c1e59432e8cb8fffe899a670b256a798
Author: tom_pro <goodmorning_pro@atguigu.com>
Date:   Mon Oct 19 10:26:06 2020 +0800

    This is my first commit.Create a new file.

# 将记录精简为一行
主机名 MINGW64 /d/GitProject/newPro (master)
$ git log --pretty=oneline
219f9cf9a99ce6801db2b0af3fe38ef71e0b96d1 (HEAD -> master) My second commit,modify good.txt
63ce33b7c1e59432e8cb8fffe899a670b256a798 This is my first commit.Create a new file.

# 将版本hash值截取前7位
主机名 MINGW64 /d/GitProject/newPro (master)
$ git log --oneline
219f9cf (HEAD -> master) My second commit,modify good.txt
63ce33b This is my first commit.Create a new file.

# 显示切换版本时移动的行数(HEAD@{移动的行数})
主机名 MINGW64 /d/GitProject/newPro (master)
$ git reflog
219f9cf (HEAD -> master) HEAD@{0}: commit: My second commit,modify good.txt
63ce33b HEAD@{1}: commit (initial): This is my first commit.Create a new file.

多屏显示控制方式:空格向下翻页、b 向上翻页、q 退出

2.3.5 切换版本:git reset

  • 基于索引值操作:推荐

    • git reset --hard [局部索引值]
    • git reset --hard 63ce33b
  • 使用^符号:只能后退

    • git reset --hard HEAD^
    • 注:一个^表示后退一步,n 个^表示后退 n 步
  • 使用~符号:只能后退

    • git reset --hard HEAD~n
    • 注:表示后退 n 步
  • - -soft 参数:在本地库移动 HEAD 指针

  • - -mixed参数:在本地库移动 HEAD 指针、重置暂存区

  • - -hard参数:在本地库移动 HEAD 指针、重置暂存区、工作区

主机名 MINGW64 /d/GitProject/newPro (master)
$ git reset --hard 63ce33b
HEAD is now at 63ce33b This is my first commit.Create a new file.

主机名 MINGW64 /d/GitProject/newPro (master)
$ git reflog
63ce33b (HEAD -> master) HEAD@{0}: reset: moving to 63ce33b
219f9cf HEAD@{1}: commit: My second commit,modify good.txt
63ce33b (HEAD -> master) HEAD@{2}: commit (initial): This is my first commit.Create a new file.

2.3.6 比较文件差异:git diff

  • git diff [文件名]:将工作区中的文件和暂存区进行比较
  • git diff [本地库中历史版本] [文件名]:将工作区中的文件和本地库历史记录比较
  • 不带文件名比较多个文件
# 修改文件
主机名 MINGW64 /d/GitProject/newPro (master)
$ vim good.txt

主机名 MINGW64 /d/GitProject/newPro (master)
$ git add good.txt

主机名 MINGW64 /d/GitProject/newPro (master)
$ git commit -m "third commit" good.txt
[master 82b3e01] third commit
 1 file changed, 7 deletions(-)

主机名 MINGW64 /d/GitProject/newPro (master)
$ git reflog
82b3e01 (HEAD -> master) HEAD@{0}: commit: third commit
63ce33b HEAD@{1}: reset: moving to 63ce33b
219f9cf HEAD@{2}: commit: My second commit,modify good.txt
63ce33b HEAD@{3}: commit (initial): This is my first commit.Create a new file.

# 比较版本差异
主机名 MINGW64 /d/GitProject/newPro (master)
$ git diff 219f9cf good.txt
diff --git a/good.txt b/good.txt
index 945c76b..d85cd07 100644
--- a/good.txt
+++ b/good.txt
@@ -2,2008 +2,3 @@
 :wq
 5555wq
 :wq
-5555wq
-:wq
-5555wq
-:wq
-5555wq
-:wq
-6666wq
-:wq
-7777wq
-:wq6666wq
-:wq
-7777wq
-:wq6666wq
-:wq
-7777wq

2.3.7 分支管理:git branch

在这里插入图片描述

  • 创建分支:git branch [分支名]
  • 查看分支:git branch -v
  • 切换分支:git checkout [分支名]
  • 合并分支:
    • 比如想把hot_fix分支上做的修改合并到主分支master上
    • 需要先将当前分支移动到master
# 创建新分支
主机名 MINGW64 /d/GitProject/newPro (master)
$ git branch other1

# 查看所有分支
主机名 MINGW64 /d/GitProject/newPro (master)
$ git branch -v
* master 82b3e01 third commit
  other1 82b3e01 third commit

# 切换分支
主机名 MINGW64 /d/GitProject/newPro (master)
$ git checkout other1
Switched to branch 'other1'

主机名 MINGW64 /d/GitProject/newPro (other1)
$ git branch -v
  master 82b3e01 third commit
* other1 82b3e01 third commit

# 在当前分支下修改文件
主机名 MINGW64 /d/GitProject/newPro (other1)
$ vim good.txt

主机名 MINGW64 /d/GitProject/newPro (other1)
$ git add good.txt

主机名 MINGW64 /d/GitProject/newPro (other1)
$ git commit -m "test branch other1" good.txt
[other1 3883728] test branch other1
 1 file changed, 1 insertion(+)

主机名 MINGW64 /d/GitProject/newPro (other1)
$ git branch -v
  master 82b3e01 third commit
* other1 3883728 test branch other1

# 切换回主分支
主机名 MINGW64 /d/GitProject/newPro (other1)
$ git checkout master
Switched to branch 'master'

主机名 MINGW64 /d/GitProject/newPro (master)
$ git branch -v
* master 82b3e01 third commit
  other1 3883728 test branch other1

# 合并分支
主机名 MINGW64 /d/GitProject/newPro (master)
$ git merge other1
Updating 82b3e01..3883728
Fast-forward
 good.txt | 1 +
 1 file changed, 1 insertion(+)

主机名 MINGW64 /d/GitProject/newPro (master)
$ cat good.txt
5555wq
:wq
5555wq
edit by other1
:wq
  • 解决分支冲突:
    • 编辑文件,删除特殊符号,明确修改内容
    • git add [文件名]
    • git commit -m “日志信息” ——注意:不能带文件名
# 模拟冲突:master分支下修改文件
主机名 MINGW64 /d/GitProject/newPro (master)
$ vim good.txt

主机名 MINGW64 /d/GitProject/newPro (master)
$ git add good.txt

主机名 MINGW64 /d/GitProject/newPro (master)
$ git commit -m "test conflict" good.txt
[master 2dbca7d] test conflict
 1 file changed, 1 insertion(+)

主机名 MINGW64 /d/GitProject/newPro (master)
$ cat good.txt
5555wq
:wq
5555wq
edit by other1
:wq

# 切换到other1分支下修改文件
主机名 MINGW64 /d/GitProject/newPro (master)
$ git checkout other1
Switched to branch 'other1'

主机名 MINGW64 /d/GitProject/newPro (other1)
$ vim good.txt

主机名 MINGW64 /d/GitProject/newPro (other1)
$ git add good.txt

主机名 MINGW64 /d/GitProject/newPro (other1)
$ git commit -m "test conflict by other1" good.txt
[other1 4ec6781] test conflict by other1
 1 file changed, 1 insertion(+)

# 切换回master合并分支
主机名 MINGW64 /d/GitProject/newPro (other1)
$ git checkout master
Switched to branch 'master'

主机名 MINGW64 /d/GitProject/newPro (master)
$ git branch -v
* master 2dbca7d test conflict
  other1 4ec6781 test conflict by other1

# 合并报错,存在冲突
主机名 MINGW64 /d/GitProject/newPro (master)
$ git merge other1
Auto-merging good.txt
CONFLICT (content): Merge conflict in good.txt
Automatic merge failed; fix conflicts and then commit the result.

# 查看文件信息,注意此时状态为(master|MERGING)
主机名 MINGW64 /d/GitProject/newPro (master|MERGING)
$ cat good.txt
5555wq
:wq
5555wq
edit by other1
:wq
<<<<<<< HEAD
edit for test conflict by mater
=======
test conflict by other1
>>>>>>> other1

# 修改文件
主机名 MINGW64 /d/GitProject/newPro (master|MERGING)
$ vim good.txt

主机名 MINGW64 /d/GitProject/newPro (master|MERGING)
$ git add good.txt

主机名 MINGW64 /d/GitProject/newPro (master|MERGING)
$ git commit -m "final edit for conflict"
[master 0eb87d7] final edit for conflict

# 合并成功,解决分支冲突
18379@DESKTOP-KB6V1F9 MINGW64 /d/GitProject/newPro (master)
$ git status
On branch master
nothing to commit, working tree clean

在这里插入图片描述

3. github相关操作

  • git 本地库和远程库(代码托管中心:github等)交互
  • 团队内部协作

在这里插入图片描述

3.1 注册github

3.2 创建远程库

  • 添加repository name:huashan

3.3 查看地址及设置别名:git remote

  • 查看地址:https://github.com/cc0824/huashan.git

在这里插入图片描述

# 设置远程库地址别名
主机名 MINGW64 /d/GitProject/huashan (master)
$ git remote add mygithub https://github.com/cc0824/huashan.git

# 查看
主机名 MINGW64 /d/GitProject/huashan (master)
$ git remote -v
mygithub        https://github.com/cc0824/huashan.git (fetch)
mygithub        https://github.com/cc0824/huashan.git (push)

3.4 推送:git push

主机名 MINGW64 /d/GitProject/huashan (master)
$ git push mygithub master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 254 bytes | 254.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/cc0824/huashan.git
 * [new branch]      master -> master

3.5 克隆:git clone

  • 完整的把远程库下载到本地
  • 创建 orign 远程地址别名
  • 初始化本地库
# 切换文件夹模拟
主机名 MINGW64 /d/GitProject/huashan (master)
$ cd ..

主机名 MINGW64 /d/GitProject (master)
$ mkdir huashan_lhc

主机名 MINGW64 /d/GitProject (master)
$ cd huashan_lhc/

主机名 MINGW64 /d/GitProject/huashan_lhc (master)
$ git clone https://github.com/cc0824/huashan.git
Cloning into 'huashan'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

主机名 MINGW64 /d/GitProject/huashan_lhc (master)
$ cd huashan/

# 完整的把远程库下载到本地
主机名 MINGW64 /d/GitProject/huashan_lhc/huashan (master)
$ ll
total 1
-rw-r--r-- 1 18379 197609 31 10月 19 16:59 huashanjianfa.txt

主机名 MINGW64 /d/GitProject/huashan_lhc/huashan (master)
$ ls -lA
total 5
drwxr-xr-x 1 18379 197609  0 10月 19 16:59 .git/
-rw-r--r-- 1 18379 197609 31 10月 19 16:59 huashanjianfa.txt

# 创建 orign 远程地址别名
主机名 MINGW64 /d/GitProject/huashan_lhc/huashan (master)
$ git remote -v
origin  https://github.com/cc0824/huashan.git (fetch)
origin  https://github.com/cc0824/huashan.git (push)

3.6 加入团队(略)

3.7 拉取:git pull

  • pull=fetch+merge
  • git fetch [远程库地址别名] [远程分支名]:将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中
  • git merge [远程库地址别名/远程分支名]
  • git pull [远程库地址别名] [远程分支名]:将远程主机的最新内容拉下来后直接合并,这样可能会产生冲突
  • 如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取
用户名 MINGW64 /d/GitProject/huashan_lhc/huashan (master)
$ git fetch origin master

3.8 SSH免密登陆

  • 可进入凭据管理器修改GitHub账号

在这里插入图片描述

  • 进入当前用户的家目录:$ cd ~
  • 删除之前保存的ssh目录:$ rm -rvf .ssh
  • 生成.ssh 目录:$ ssh-keygen -t rsa -C atguigu2018ybuq@aliyun.com
  • 进入.ssh 目录:$ cd .ssh
  • 查看 id_rsa.pub 文件:$ cat id_rsa.pub
  • 把生成的ssh复制到github:点击用户头像 — settings — SSH and GPG keys — new SSH key
  • 回到 Git bash 创建远程地址别名:$ git remote add origin_ssh git@github.com:cc0824/huashan.git
  • 推送文件进行测试:$ git push origin_ssh master

3.9 跨团队协作

  • 跨团队操作

在这里插入图片描述

  1. 东方不败登陆账号 fork 岳不群的远程库
  2. clone,对项目做出修改
  3. push
  4. pull request:界面上点击 pull request ---- new pull request ---- create pull request
  5. 岳不群登陆账号:界面上点击 pull request ---- 查看刚才东方不败发送的 pull request 请求 ----查看 files changed 项目被修改的部分进行审核 ---- merge pull request ---- confirm merge

4. eclipse相关操作

4.1 项目初始化到本地库

项目 — 右键 — team — share project —

在这里插入图片描述
window — preference — 就可以看到项目配置的 git 文件

在这里插入图片描述

4.2 设置用户签名

window — preference — add entry
在这里插入图片描述

4.3 git图标

在这里插入图片描述

4.4 提交到本地库

  • 可以看到项目文件上有问号,代表untracked

在这里插入图片描述

  • 忽略文件:这些都是 Eclipse 为了管理我们创建的工程而维护的文件,和开发的代码没有直接关系。最好不要在 Git 中进行追踪,也就是把它们忽略。因为不同ide版本的特定文件就不一样。

  • eclipse官方提供了忽略文件的样本:https://github.com/github/gitignore/blob/master/Java.gitignore

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

# 额外添加
.classpath
.project
.settings
target
  • 进入家目录:.gitconfig 文件存放的目录:C:\Users\18379
  • 新建:Java.gitignore 文件,其中内容为官方样本
  • 编辑 .gitconfig 文件,添加:(注意:路径中使用 ‘/’
[core]
	excludesfile = C:/Users/18379/Java.gitignore
  • 可能需要重启eclipse
  • 项目右键 —— team —— add to index添加到暂存区(或者直接将文件从unstaged拖拽到staged)
  • 项目右键 —— team —— commit —— 可以看到有三部分:unstaged changes、staged changes、commit message

在这里插入图片描述

4.5 推送到远程库

  • github上新建远程库:new repository
  • 复制远程库https地址:https://github.com/cc0824/Tank.git
  • 项目右键 —— team —— remote —— push ——粘贴到URI中
  • 添加 authentication —— next —— add all branches spec —— next —— 有需要可以修改message details —— finish

在这里插入图片描述

4.6 远程库克隆到本地工作区

import —— git —— projects from git
在这里插入图片描述

next —— clone
在这里插入图片描述
next —— 复制待克隆项目的https地址到URI
在这里插入图片描述
next —— 修改想要保存的目录地址
在这里插入图片描述
next —— 只能选择第三项
在这里插入图片描述
项目右键 —— configure —— convert to maven project

4.7 解决冲突

冲突文件右键 —— team —— merge tool

5. idea相关操作

5.1 绑定Github账号

在这里插入图片描述

5.2 创建本地库

在这里插入图片描述

在这里插入图片描述

5.3 提交到本地库

在这里插入图片描述

  • 选择需要提交的文件、填写commit message、commit

在这里插入图片描述

5.4 推送到远程库

  • 在Github上创建新的仓库、复制URL地址
  • git remote绑定仓库
  • git push推送

在这里插入图片描述

5.5 分支操作

合并开发分支到master

切换到本地master分支,update project,把分支代码更新到最新
点击远程需要合并的分支——右键——merge into current
git push

在需要合并的分支上,update project,把分支代码更新到最新 切换
切换到本地master分支,update project,把分支代码更新到最新
点击本地需要合并的分支——右键——merge into current
git push

合并其他分支上的某次commit:

git cherry-pick [commit-id]

从master分支拉取已上线的代码到开发分支

这里是引用

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值