截图.png

1、使用idea git

1.1 下载程序

截图.png

1.2 更新本地程序

截图.png

1.3 暂存修改

截图.png

1.4 提交程序

截图.png

1.5 切换分支

截图.png

1.6 本地与git仓库对比

截图.png

1.7 回退指定已修改的文件内容

截图.png

1.8 查看提交历史

截图.png

2、使用Git Bash Here

2.1 初始化仓库(git init)

使用您当前目录作为Git仓库,我们只需使它初始化。

  1. git init

使用我们指定目录作为Git仓库。

  1. git init newrepo

初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

例:

用 git init 在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。

在目录中执行 git init,就可以创建一个 Git 仓库了。比如我们创建 javaee 项目:

$ mkdir javaee

$ cd javaee

$ git init

Initialized empty Git repository in /www/javaee/.git/

# 在 /www/javaee/.git/ 目录初始化空 Git 仓库完毕。

2.2 添加文件到暂存区(git add)

如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

$ git add *.c

$ git add README

添加多个文件:

$ git add README hello.php

2.3 将暂存取内容添加到仓库中(git commit)

$ git commit -m ‘initial project version’

git commit -m “这是注释” 执行后修改commit提交的注释内容

如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。命令格式如下:

git commit -a

如:

$ git commit -am ‘changes to hello file’

[master 78b2670] changes to hello file

1 files changed, 2 insertions(+), 1 deletions(-)

2.4 拷贝一份远程仓库(git clone)

拷贝仓库的命令格式为:

git clone [url]

拷贝一份远程仓库,也就是下载一个项目。

例:

$ git clone git://github.com/schacon/grit.git

执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。

如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit

2.5 创建目录(mkdir)

在当前位置创建目录javaee:

$ mkdir javaee

2.6 创建文件(touch)

在当前目录下创建文件:

$ touch README

$ touch hello.php

2.7 查看仓库当前的状态

git status:查看仓库当前的状态,显示有变更的文件,以查看在你上次提交之后是否有修改。

$ git status -s

A README

A hello.php

执行 git status,就可以看到这两个文件已经加上去了。

例:

现在我们改个文件,再执行一下 git status:

$ vim README

$ git status -s

AM README

A hello.php

“AM” 状态的意思是,这个文件在我们将它添加到缓存之后又有改动。改动后我们在执行 git add 命令将其添加到缓存中:

$ git add .

$ git status -s

A README

A hello.php

如上演示该命令的时候加了 -s 参数,以获得简短的结果输出。如果没加该参数会详细输出内容。

标志说明:

A: 你本地新增的文件(服务器上没有).

C: 文件的一个新拷贝.

D: 你本地删除的文件(服务器上还在).

M: 文件的内容或者mode被修改了.

R: 文件名被修改了。

T: 文件的类型被修改了。

U: 文件没有被合并(你需要完成合并才能进行提交)。

X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)。

2.8 显示以写入缓存与已修改但未写入缓存的改动的区别(git diff)

  1. 执行 git diff 来查看执行 git status 的结果的详细信息。
  2. git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。
  3. 尚未缓存的改动:git diff
  4. 查看已缓存的改动: git diff —cached
  5. 查看已缓存的与未缓存的所有改动:git diff HEAD
  6. 显示摘要而非整个 diff:git diff —stat

2.9 取消缓存的内容(git reset HEAD)

git reset HEAD 命令用于取消缓存已缓存的内容。

这里我们有两个最近提交之后又有所改动的文件。我们将两个都缓存,并取消缓存其中一个。

$ git status -s

M README

M hello.php

$ git add .

$ git status -s

M README

M hello.pp

$ git reset HEAD — hello.php

Unstaged changes after reset:

M hello.php

$ git status -s

M README

M hello.php

现在你执行 git commit 将只记录 README 文件的改动,并不含现在并不在缓存中的 hello.rb。

2.10 将文件从缓存区中移除(git rm)

git rm 将文件从缓存区中移除。

如我们删除 hello.php文件:

$ git rm hello.php

rm ‘hello.php’

$ ls

README

默认情况下,git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除。 如果要在工作目录中留着该文件,可以使用命令:

git rm —cached

2.11 分支管理

2.11.1 列出分支(git branch)

git branch

2.11.2 创建分支(git branch branchname)

git branch branchname

2.11.3 切换分支(git checkout branchname)

--切换分支命令:

git checkout branchname

--创建新分支并立即切换到该分支下:

git checkout -b branchname

2.11.4 合并分支(git merge)

将master分支内容合并到dev分支:

git checkout dev —切换到你所在分支dev

git merge master

2.11.5 删除分支(git branch -d branchname)

将master分支内容合并到dev分支:

git checkout dev—切换到你所在分支dev

git merge master

2.11.6 查看当前分支历史提交记录(git log)

查看当前分支历史提交记录:

git log

查看当前分支历史提交记录简介版:

git log —oneline

-——————————————Git命令集————————————————-

3、Git命令集

git init # 初始化本地git仓库(创建新仓库)

git config —global user.name “xxx” # 配置用户名

git config —global user.email “xxx@xxx.com” # 配置邮件

git config —global color.ui true # git status等命令自动着色

git config —global color.status auto # 用于全局配置 Git 的状态输出的颜色。

git config —global color.diff auto # 用于全局配置Git的git diff命令的输出颜色。

git config —global color.branch auto # 用于全局配置 Git 分支相关输出的颜色显示。

git config —global color.interactive auto # 用于在交互式命令行模式下为 Git 的交互式显示(如合并冲突时的 diff 工具、交互式 rebase 等)配置颜色显示。

git config —global —unset http.proxy # remove proxy configuration on git 用于移除全局 Git 配置中的 HTTP 代理设置。

git clone git+ssh://git@192.168.53.168/VT.git # clone远程仓库

git status # 查看当前版本状态(是否修改)

git add xyz # 添加xyz文件至index

git add . # 增加当前子目录下所有更改过的文件至index

git commit -m ‘xxx’ # 提交

git commit —amend -m ‘xxx’ # 合并上一次提交(用于反复修改)

git commit -am ‘xxx’ # 将add和commit合为一步

git rm xxx # 删除index中的文件

git rm -r * # 递归删除

git log # 显示提交日志

git log -1 # 显示1行日志 -n为n行

git log -5

git log —stat # 显示提交日志及相关变动文件

git log -p -m # 用于查看提交历史,并显示每个提交的变更内容。

git show dfb02e6e4f2f7b573337763e5c0013802e392818 # 显示某个提交的详细内容

git show dfb02 # 可只用commitid的前几位

git show HEAD # 显示HEAD提交日志

git show HEAD^ # 显示HEAD的父(上一个版本)的提交日志 ^^为上两个版本 ^5为上5个版本

git tag # 显示已存在的tag

git tag -a v2.0 -m ‘xxx’ # 增加v2.0的tag

git show v2.0 # 显示v2.0的日志及详细内容

git log v2.0 # 显示v2.0的日志

git diff # 显示所有未添加至index的变更

git diff —cached # 显示所有已添加index但还未commit的变更

git diff HEAD^ # 比较与上一个版本的差异

git diff HEAD — ./lib # 比较与HEAD版本lib目录的差异

git diff origin/master..master # 比较远程分支master上有本地分支master上没有的

git diff origin/master..master —stat # 只显示差异的文件,不显示具体内容

git remote add origin git+ssh://git@192.168.53.168/VT.git # 用于将一个远程仓库添加为本地仓库的默认远程仓库,并将它命名为 “origin”

git branch # 显示本地分支

git branch —contains 50089 # 显示包含提交50089的分支

git branch -a # 显示所有分支

git branch -r # 显示所有原创分支

git branch —merged # 显示所有已合并到当前分支的分支

git branch —no-merged # 显示所有未合并到当前分支的分支

git branch -m master master_copy # 本地分支改名

git checkout -b master_copy # 从当前分支创建新分支master_copy并检出

git checkout -b master master_copy # 上面的完整版

git checkout features/performance # 检出已存在的features/performance分支

git checkout —track hotfixes/BJVEP933 # 检出远程分支hotfixes/BJVEP933并创建本地跟踪分支

git checkout v2.0 # 检出版本v2.0

git checkout -b devel origin/develop # 从远程分支develop创建新本地分支devel并检出

git checkout — README # 检出head版本的README文件(可用于修改错误回退)

git merge origin/master # 合并远程master分支至当前分支

git cherry-pick ff44785404a8e # 合并提交ff44785404a8e的修改

git push origin master # 将当前分支push到远程master分支

git push origin :hotfixes/BJVEP933 # 删除远程仓库的hotfixes/BJVEP933分支

git push —tags # 把所有tag推送到远程仓库

git fetch # 获取所有远程分支(不更新本地分支,另需merge)

git fetch —prune # 获取所有原创分支并清除服务器上已删掉的分支

git pull origin master # 获取远程分支master并merge到当前分支

git mv README README2 # 重命名文件README为README2

git reset —hard HEAD # 将当前版本重置为HEAD(通常用于merge失败回退)

git rebase # 它可以在合并分支时改变提交历史,用于整理提交、合并提交或将提交添加到不同的基础上。

git rebase <目标分支> # 这个命令会将当前分支的提交追加到目标分支的末尾,并调整提交历史。

git rebase -i <提交ID> # 命令会打开一个交互式界面,展示你要重新排列的提交历史。你可以对每个提交应用不同的操作来修改提交历史,如合并提交、重新排序提交、编辑提交消息等。

git branch -d hotfixes/BJVEP933 # 删除分支hotfixes/BJVEP933(本分支修改已合并到其他分支)

git branch -D hotfixes/BJVEP933 # 强制删除分支hotfixes/BJVEP933

git ls-files # 列出git index包含的文件

git show-branch # 图示当前分支历史

git show-branch —all # 图示所有分支历史

git whatchanged # 显示提交历史对应的文件修改

git revert dfb02e6e4f2f7b573337763e5c0013802e392818 # 撤销提交dfb02e6e4f2f7b573337763e5c0013802e392818

git ls-tree HEAD # 内部命令:显示某个git对象

git rev-parse v2.0 # 内部命令:显示某个ref对于的SHA1 HASH

git reflog # 显示所有提交,包括孤立节点

git show HEAD@{5} # 用于显示指定相对位置的提交详细信息和差异。具体来说,HEAD@{5}表示相对于当前HEAD的第五个提交。它可以表示相对于HEAD的任何位置的提交索引,你也可以使用其他符号(如@{n})来表示相对位置。

# 通过运行git show HEAD@{5}命令,Git 会显示第五个提交的详细信息,包括提交作者、提交日期、提交消息以及与其父提交之间的差异。

git show master@{yesterday} # 显示master分支昨天的状态

git log —pretty=format:’%h %s’ —graph # 图示提交日志

git show HEAD~3 # 用于显示当前提交的父提交中的详细信息和差异。

# 具体来说,HEAD~3表示当前提交的第三个父提交(祖父提交)。如果当前提交只有一个父提交(典型情况下的普通提交),那么HEAD~3将指向父提交的父提交。

# 通过运行git show HEAD~3命令,Git 会显示第三个父提交的详细信息,包括提交作者、提交日期、提交消息以及与其父提交之间的差异。

git show -s —pretty=raw 2be7fcb476 # 用于以原始格式显示指定提交的简要信息。

# 具体来说,命令中的选项及参数含义如下:

# -s选项表示只显示简要信息,不显示提交的差异(diff)。

# —pretty=raw选项指定以原始格式显示信息,包括作者、提交者、提交日期和提交消息。

# 2be7fcb476是一个示例的提交哈希值。你可以将其替换为你想要查看的具体提交的哈希值。

git stash # 暂存当前修改,将所有至为HEAD状态

git stash list # 查看所有暂存

git stash show -p stash@{0} # 参考第一次暂存

git stash apply stash@{0} # 应用第一次暂存

git grep “delete from” # 文件中搜索文本“delete from”

git grep -e ‘#define’ —and -e SORT_DIRENT # 多条件匹配,在 Git 仓库中搜索同时包含#define和SORT_DIRENT的内容,然后输出匹配的结果。

git gc # 用于优化 Git 仓库的存储和性能,它涉及垃圾回收操作,清理无用的对象,并对仓库进行优化

git fsck # git fsck是 Git 的文件系统检查命令,用于检查并修复 Git 仓库中的对象和引用的完整性问题。

在 Git 中,所有的对象(如提交对象、树对象、文件对象等)都被存储在 Git 的对象数据库中。有时,由于各种原因(如硬盘故障、不当操作),仓库可能会变得损坏或不完整,导致对象或引用丢失或损坏。

git fsck命令会扫描 Git 仓库,并检查每个对象的完整性和引用的一致性。它可以发现以下问题:

错误的对象类型或格式。丢失的对象或不可达的对象。引用错误的分支或标签。