git命令总结(转载整理)

前言


项目的版本管理在开发的时候是一个常规操作,结合其他博客与实际操作来整理一下Git的一些常规操作。

整体结构

Git的整体流程图

上图是git的一个整体结构图,git中主要包含四块区域。

workspace:工作区。可以理解为项目所在目录。执行git add *命令就把改动提交到了暂存区,执行git pull命令将远程仓库的数据拉到当前分支并合并,执行git checkout [branch-name]切换分支。

Index:暂存区。执行git commit -m '说明' 命令就把改动提交到了仓库区(当前分支)。

Repository:本地仓库区。执行git push origin master提交到远程仓库,执行git clone 地址将克隆远程仓库到本地。

Remote:远程仓库,比如Github这种仓库,但是前提是要Git先关联上远程仓库,具体可以参考这篇

Git的配置

查看当前git的配置

1
git config --list

如果还没有进行过配置,可以通过如下命令配置用户名和邮箱

1
2
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

创建仓库

在当前目录新建一个Git代码库

1
git init

提交文件

1
2
3
4
# 添加当前目录的所有文件到暂存区
git add *
# 添加当前目录的单个文件到暂存区
git add test.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 提交暂存区到仓库区
git commit -m [message]
# 可以查看一下仓库当前的状态
git status
# 可以查看提交的历史记录(SHA-A校验和,作者名称,邮箱,提交时间,提交说明)
git log
# 可以通过git log 命令知道每一次提交的commit号,如果想知道每次提交的一个具体记录,我们可以执行以下命令
git show [commit号]

# 为远程Git仓库更名为origin,origin是默认远程仓库的叫法,当然也可以叫别的
git remote add origin git@github.com:hqf1996/myGitTest.git
# 下一步操作就是把本地库的所有内容都推送到远程库中(注意由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令)
git push -u origin master
# 之后就能用以下命令即可提交了
git push origin master

以上操作是将本地的内容推送到远程的空仓库中的操作,如果想从远程仓库克隆整个项目,则可以通过以下命令

1
git clone git@github.com:hqf1996/myGitTest.git

分支

如果在多人协作的情况下,分支是一个非常常用的功能。

1
2
3
4
5
6
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地分支和远程分支
git branch -a
1
2
3
4
5
6
7
8
9
10
11
12
# 创建一个分支(但还未切换到该分支上)
git branch slave1
# 切换分支
git checkout slave1
# 还能创建分支与切换分支合并使用
git checkout -b slave1
# 用于合并指定分支(slave1)到当前分支(master)
git merge slave1
# 删除分支
git branch -d slave1
# 删除远程分支
git push origin --delete slave1

标签

标签主要是用来做版本回退的。

1
2
3
4
5
6
7
8
9
10
# 列出所有tag
git tag
# 新建一个tag在当前commit(指的就是上一次做commit操作时候的那个commit)
git tag [tag]
# 新建一个tag在指定commit(要用commit号【e97e9dc4dde4a50a8371adbf0492189d6088237f】这种老长一串)
git tag [tag] [commit]
# 删除本地tag
git tag -d [tag]
# 删除远程tag
git push origin :refs/tags/[tagName]

撤销

1
2
3
4
5
6
7
8
# 恢复暂存区的指定文件到工作区
git checkout [file]
# 恢复暂存区的所有文件到工作区
git checkout .
# 回退到上一个版本,在Git中,用HEAD表示当前版本
git reset --hard HEAD^
# 如果已经commit到本地仓库的话,可以执行以下命令回退到某个commit版本
git reset [commit号]

更新一个merge的例子:如果有多个branch,也就是有多个人进行开发,那么如何将这些分支都合并到Master上

比如现在整个仓库的情况是有一个master并且有两个branch,每个branch中都有自己更新的内容

repo的情况

1
2
3
4
5
6
7
8
9
# 下面演示如何将其他的分支合并到master分支上
# 切换到master分支中
git checkout master
# 先拉一下远端的master,这个是为了避免远端的master版本出现更新,本地需要同步一下
git pull
# 将branch1合并到本地的master上
git merge branch1
# push到远端仓库
git push

此时master上已经合并上的branch1更新的代码

1
2
# 合并branch2的分支
git merge origin/branch2

此时由于两个分支都对某一个文件做了修改,所以有冲突,需要手动的去做判断了。

1
2
3
4
5
6
7
8
9
10
11
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
<<<<<<< HEAD
System.out.println("111111");
=======
System.out.println("2222222");
>>>>>>> origin/branch2
System.out.println("Hello World");
}
}

当然,也可以通过IDEA的工具去做管理,看着也比较方便一些。

1
2
3
# 然后重新commit再push即可
git commit -m "merge commit"
git push

此时的master中就是最新的了。