Git常用命令

Git命令

配置用户名和密码

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。

这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改 :

  • git config --global user.name = "leizige"
  • git config --global user.email = "qx_leizige@163.com"

如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。

检查配置信息

如果想要检查你的配置,可以使用 git config --list 命令来列出所有 Git 当时能找到的配置。

获取Git仓库

通常有两种获取 Git 项目仓库的方式:

  1. 将尚未进行版本控制的本地目录转换为 Git 仓库;

  2. 从其它服务器 克隆 一个已存在的 Git 仓库。

在已有目录中初始化仓库

首先进入该目录,执行 git init 命令。

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是Git 仓库的骨干。

克隆现有的仓库

如果你想获得一份已经存在了的 Git 仓库的拷贝,这时就要用到 git clone 命令。

克隆仓库的命令是 git clone 。 比如,要克隆 RocketMQ 的仓库,可以用下面的命令:

这会在当前目录下创建一个名为 “rocketmq” 的目录,并在这个目录下初始化一个 .git 文件夹,

git clone https://github.com.cnpmjs.org/apache/rocketmq.git

如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以通过额外的参数指定新的目录名:

git clone https://github.com.cnpmjs.org/apache/rocketmq.git myRocketMQ

记录每次更新到仓库

Git 工作目录下的每一个文件都有这两种状态:已跟踪未跟踪

已跟踪的文件是指那些被纳入了版本控制的文件,简而言之,已跟踪的文件是指Git已经知道的文件。初次clone仓库的文件都属于已跟踪文件,并且属于未修改状态。

工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。

检查当前文件状态

可以用 git status 命令查看哪些文件处于什么状态。 如果在克隆仓库后立即使用此命令,会看到类似这样的输出:

D:\rockerMq\myRocketMQ>git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean

这说明已跟踪文件在上次提交后都没有被修改过,并且当前分支是 master .

如果在当前目录下创建一个新的 MyReadme 文件,会看到一个新的未跟踪文件:

D:\rockerMq\myRocketMQ>git status
On branch master
Your branch is up to date with 'origin/master'.

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

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

可以看到新建的 MyReadme.txt 文件出现在 Untracked files 下面。

跟踪文件状态

使用 git add 命令来跟踪一个文件,比如跟踪 MyRadme.txt 文件:

git add MyReadme.txt

再次执行 git stats 命令,会发现 MyReadme.txt 文件已经被更新,并且处于暂存状态

D:\rockerMq\myRocketMQ>git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   MyReadme.txt

只要在 Changes to be committed 这行下面的,就说明是已暂存状态。

状态预览

git status 命令的输出十分详细,但其用语有些繁琐。 如果你使用 git status -s 命令或 git status --short 命令,你将得到一种格式更为紧凑的输出。

D:\rockerMq\myRocketMQ>git status -s
AM MyReadme.txt
 D README.md
A  README1.md
 M pom.xml
?? add.txt
  • 新添加的未跟踪文件前面有 ?? 标记
  • 新添加到暂存区中的文件前面有 A 标记
  • 修改过的文件前面有 M 标记

查看已暂存和未暂存的修改

如果你想知道具体修改了什么地方,可以使用 git diff 命令。 git diff 能通过文件补丁的格式更加具体地显示哪些行发生了改变。

我们先创建 MyReadme.txt 文件,修改内容为 123123 后提交到暂存区,提交字后修改内容为 234234。然后可以通过 git diff命令查看尚未暂存的文件更新了哪些部分。

D:\rockerMq\myRocketMQ>git add .

D:\rockerMq\myRocketMQ>git status -s
A  MyReadme.txt

D:\rockerMq\myRocketMQ>git diff
diff --git a/MyReadme.txt b/MyReadme.txt
index 93a5f6ac..4733641d 100644
--- a/MyReadme.txt
+++ b/MyReadme.txt
@@ -1 +1 @@
-123123
\ No newline at end of file
+234234
\ No newline at end of file

此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。 也就是修改之后还没有暂存起来的变化内容。

若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged 命令。 这条命令将比对已暂存文件与最后一次提交的文件差异。

提交更新

现在的暂存区已经准备就绪,可以提交了。每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了, 然后再运行提交命令。

git commit

另外,你也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行,如下所示:

git commit -m "提交信息"

跳过使用暂存区域

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。 Git 提供了一个跳过使用暂 存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

D:\rockerMq\myRocketMQ>git status -s
 M README.md

D:\rockerMq\myRocketMQ>git commit -a -m "update README"
[master 72499b7f] update README
 1 file changed, 1 insertion(+), 1 deletion(-)

D:\rockerMq\myRocketMQ>git status -s

这边修改完 README.md 文件后直接commit,是因为 -a 选项使本次提交包含了所有修改过的文件。

查看提交历史

通过 git log 命令可以查看提交历史。当你在项目中运行 git log 命令时,会看到下面的输出:

D:\rockerMq\myRocketMQ>git log -2
commit 72499b7fda3dd35cdad5203676482aa46e8be540 (HEAD -> master)
Author: leizige <lei.tl@bitsun-inc.com>
Date:   Thu Nov 18 14:40:13 2021 +0800

    update README

commit df4e98855d461d85e9c4ed43add1b12a58bca7b6 (origin/master, origin/HEAD)
Author: lushilin <897401919@qq.com>
Date:   Thu Oct 28 08:51:26 2021 +0800

    fix(broker): can not clear topic unitSubFlag (#3429)

    Co-authored-by: lushilin <lushilin.me@bytedance.com>

不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面。

--stat 选项在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。

Git 别名

Git 并不会在你输入部分命令时自动推断出你想要的命令。 如果不想每次都输入完整的 Git 命令,可以通过 git config 文件来轻松地为每一个命令设置一个别名。 这里有一些例子你可以试试:

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

Git 分支

使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

分支创建

创建一个 testing 分支,需要用到 git branch 命令:

git branch testing

这会在当前的提交对象上创建一个指针。

分支切换

要切换到一个已经存在的分支上,需要使用 git checkout 命令:

git checkout testing

如果想新建一个分支并同时切换到新建的分支上,可以在 git checkout 命令后面添加 -b 选项:

git checkout -b testing

它是以下两条命令的简写:

git branch testing
git checkout testing

删除分支

删除本地分支

如果你不需要某个本地分支, 你可以使用带 -d 选项的 git branch 命令来删除分支:

git branch -d testing

删除远程分支

如果你已经通过远程分支做完所有的工作了,可以运行带有 --delete 选项的 git push 命令来删除一个远程分支:

git push origin --delete testing

分支合并

如果你在issue66上面修复了一个bug,需要将修改合并到master分支上面。你只需要检出到你想要合并的分支,然后执行 git merge 命令:

git checkout master
git merge issue66

注意:这个只是在本地合并完成了,merge到master分之后,还需要push到远程的master分支上面。

远程分支

远程引用是对远程仓库的引用(指针),包括分支、标签等等。

推送

本地的分支并不会自动与远程仓库同步——你必须显式地推送想要分享的分支。

如果需要和别人一起在 develop 分支开发,可以运行 git push <remote> <branch> 命令,推送本地的 develop 分支来更新远程的 develop 分支

git push origin develop

如果并不想让远程仓库的分支叫做develop,可以使用以下命令:

git push origin develop:develop1

跟踪分支

从一个远程跟踪分支检出一个本地分支会自动创建所谓的“跟踪分支”(它跟踪的分支叫做“上游分支”)。

跟踪分支是与远程分支有直接关系的本地分支。

如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。

如果想要将本地分支与远程分支设置为不同的名字,你可以轻松地使用上一个命令增加一个不同名字的本地分支:

git checkout -b testing origin/develop
Switched to a new branch 'testing'
Branch 'testing' set up to track remote branch 'develop' from 'origin'.

现在本地分支 testing 会自动从 develop 拉取。

If you’re going to reuse code, you need to understand that code!
原文地址:https://www.cnblogs.com/leizzige/p/15577611.html