关于 Git

Git常用命令

环境配置

  1. 设置用户名和email地址,每次Git提交都会使用该用户信息。
git config --global user.name "lvshui5u"
git config --global user.email "lvshui5u@qq.com"
  1. 查看配置信息
git config --list

git config user.name
git config user.email
$ git config user.name
lvshui5u
$ git config user.email
lvshui5u@qq.com

通过上述命令进行配置的信息会保存在~/.gitconfig文件中

找到当前用户下的.gitconfig文件,打开后

[user]
name = lvshui5u
email = lvshui5u@qq.com

获取Git仓库

创建一个目录D:\GitRepos

  1. 本地初始化一个Git仓库
    在上述目录中新建一个repo1文件夹,进入后右击进入Git Bash
git init
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/repo1
$ git init
Initialized empty Git repository in D:/GitRepos/repo1/.git/

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/repo1 (master)
$
初始化了一个空的git repository
该.git文件为隐藏文件
  1. 远程仓库克隆(以gitee为例)
    回到D:\GitRepos目录
git clone
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos
$ git clone https://gitee.com/lvshui5u/test-repo.git
Cloning into 'test-repo'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (5/5), done.

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos
$

部分概念

  • 版本库:.git隐藏文件夹即版本库,其中存储了很多配置信息、日志信息和文件版本信息等。
  • 工作目录:存放开发代码的区域,也包括.git文件,即可认为是上述的repo1文件夹和repo-test文件夹。
  • 暂存区:.git目录下的index文件,也可叫做stage(阶段),是一个临时保存修改文件的区域。

工作目录下的状态

  • untracked:未跟踪(没有被纳入到版本控制过程中)
  • tracked:已跟踪(又分为三种状态)
    unmodified:未修改状态
    modified:修改状态
    staged:已暂存状态
  1. 查看文件状态
git status
$ git status
On branch master
Your branch is up to date with 'origin/master'.

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:   README.md

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

no changes added to commit (use "git add" and/or "git commit -a")
  1. 更加简洁的输出方式
git status -s
$ git status -s
 M README.md
?? hello.txt
M 代表modified 已修改状态
?? 代表untracked 未跟踪状态
  1. 将未跟踪的文件加入到暂存区
git add
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git status -s
 M README.md
?? hello.txt

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git add hello.txt

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git status -s
 M README.md
A  hello.txt
  1. 取消暂存
git restore --staged
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git restore --staged hello.txt

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git status -s
 M README.md
?? hello.txt

  1. 提交
git commit
git commit -m "logs"
后者伴随一个日志信息,前者会打开一个编辑器要求编辑日志信息
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git status -s
 M README.md
?? hello.txt

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git add hello.txt

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git status -s
 M README.md
A  hello.txt

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git commit -m "init hello.txt"
[master 5bc3064] init hello.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hello.txt
再次查看状态
$ git status -s
 M README.md
只剩下一个readme.md文件,此文件被修改但是没有被暂存
hello.txt文件处于已被跟踪且未修改状态
  1. 删除文件
git rm
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git rm hello.txt
rm 'hello.txt'

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git status -s
D  hello.txt

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git commit -m "delete hello.txt"
[master cfe243d] delete hello.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 hello.txt
执行rm 指令后hello.txt直接进入暂存区,然后提交
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git status -s
 D README.en.md

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git add README.en.md

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git commit -m "delete readme.en.md"
[master 33bb3e9] delete readme.en.md
 1 file changed, 36 deletions(-)
 delete mode 100644 README.en.md
右键直接删除文件,需要将文件加入暂存区,然后再提交
  1. 将一些文件加入到忽略列表,无需纳入Git的管理中。
    将无需管理的文件加入到.gitignore中。

  2. 查看日志

git log
$ git log
commit 33bb3e904f4dd91347eb0d68418383fc68a5a35f (HEAD -> master)
Author: lvshui5u <lvshui5u@qq.com>
Date:   Thu May 6 15:08:23 2021 +0800

    delete readme.en.md

commit cfe243dc06a20efaacce05fd53dd85612ce4d29f
Author: lvshui5u <lvshui5u@qq.com>
Date:   Thu May 6 15:04:00 2021 +0800

    delete hello.txt

远程仓库

  1. 查看远程仓库
git remote
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git remote
origin

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo (master)
$ git remote -v
origin  https://gitee.com/lvshui5u/test-repo.git (fetch)
origin  https://gitee.com/lvshui5u/test-repo.git (push)
clone下来的远程仓库别名默认为origin
  1. 添加远程仓库
git remote add <别名> <url>
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/repo1 (master)
$ git remote add origin https://gitee.com/lvshui5u/test-repo-2.git

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/repo1 (master)
$ git remote -v
origin  https://gitee.com/lvshui5u/test-repo-2.git (fetch)
origin  https://gitee.com/lvshui5u/test-repo-2.git (push)

  1. 从远程仓库克隆
git clone
  1. 移除远程仓库(并不会影响远程仓库本身)
git remote rm
  1. 从远程仓库中抓取
git fetch
$ git fetch
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), 1.59 KiB | 3.00 KiB/s, done.
From https://gitee.com/lvshui5u/test-repo-2
 * [new branch]      master     -> origin/master
此命令不会自动将新版本合并到本地仓库
需要手动合并
git merge origin/master
  1. 从远程仓库中拉取
git pull
$ git pull origin master
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), 1.59 KiB | 1024 bytes/s, done.
From https://gitee.com/lvshui5u/test-repo-2
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master
  1. 推送到远程仓库中
git push
$ git push origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 302 bytes | 302.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/lvshui5u/test-repo-2.git
   42c3dea..afcc220  master -> master
事先add和commit

分支操作

  1. 查看分支
git branch
git branch -r
git branch -a
列出本地分支
列出远程分支
列出所有分支
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git branch
* master

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git branch -r
  origin/master

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git branch -a
* master
  remotes/origin/master

  1. 创建分支
git branch <分支名>
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git branch b1

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git branch
  b1
* master
括弧内为当前分支名
*号后为当前分支名
  1. 切换分支
git checkout <分支名>
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git checkout b1
Switched to branch 'b1'

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (b1)
$ git branch
* b1
  master
  1. 合并分支
git merge
在b1分支下add并commit一个新文件,切换到master分支下
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git merge b1
Updating afcc220..ca0fe75
Fast-forward
 User.java | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 User.java
合并时会产生冲突吗?
比如在master分支和在b1分支下同时对某个文件进行了修改并commit

在master分支下对User.java进行修改后commit

public class User{
	private int num;
	private String name;
}

在b1分支下对User.java进行修改后commit

public class User{
	private int age;
	private String gender;
}

之后回到master分支下合并b1分支

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git merge b1
Auto-merging User.java
CONFLICT (content): Merge conflict in User.java
Automatic merge failed; fix conflicts and then commit the result.

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master|MERGING)
$
可以看到,自动合并失败,需要手动修复冲突然后提交。
打开此时的User.java查看
public class User{
<<<<<<< HEAD
    private int num;
    private String name;
=======
    private int age; 
    private String gender;
>>>>>>> b1
}
手动修改后add并commit
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master|MERGING)
$ git add User.java

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master|MERGING)
$ git commit -m "update User.java manually"
[master 0e06a45] update User.java manually

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$
  1. 删除本地分支
git branch -d <分支名>
git branch -D <分支名>
当本地仓库中分支内容改变,没有推送到远程仓库
执意删除需要-D
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git branch
  b1
* master

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git branch -d b1
Deleted branch b1 (was 0f85c87).

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git branch
* master
  1. 删除远程仓库
git push <仓库名,origin> -d <分支名>
$ git push origin -d b1
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/lvshui5u/test-repo-2.git
 - [deleted]         b1

标签操作

  1. 创建标签
git tag <tagName>
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git tag v0.1

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git tag v0.2
  1. 查看标签
git tag
$ git tag
v0.1
v0.2

  1. 推送标签
git push <仓库名> <tagName>
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git push origin v0.1
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/lvshui5u/test-repo-2.git
 * [new tag]         v0.1 -> v0.1

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git push origin v0.2
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/lvshui5u/test-repo-2.git
 * [new tag]         v0.2 -> v0.2
  1. 检出标签
git checkout -b <分支名> <标签名>
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (master)
$ git checkout -b b2 v0.1
Switched to a new branch 'b2'
新建一个分支b2,在该分支打开v0.1标签时状态
  1. 删除本地标签
git tag -d <tagName>
lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (b2)
$ git tag -d v0.1
Deleted tag 'v0.1' (was 0e06a45)

lvshui5u@DESKTOP-J1T9IH9 MINGW64 /d/GitRepos/test-repo-2 (b2)
$ git tag
v0.2
  1. 删除远程标签
git push origin :refs/tags/<tagName>
$ git push origin :refs/tags/v0.1
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/lvshui5u/test-repo-2.git
 - [deleted]         v0.1
 使用TortoiseGit管理文件
 在IDEA中进行Git管理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值