Git 相关知识点

git 仓库初始化

git init  仓库名

配置邮箱和作者信息

git config --global user.email "zhang
@zhang.mba"

git config --global user.name "zhang"

添加

git add 文件名 或 ./*

提交

git commit -m "提交说明注释"

 

查看状态

git status

查看日志

git log
//只显示提交的注释
git log --oneline
git log --graph --oneline --all --decorate
 

 

回滚文件

git checkout -- ./

先在服务器上建一个远程仓库test1,将本地提交

git remote add origin http://git.zhang.mba/zhangzhiqi/test1.git

git push -u origin master

从Git服务器上拉取仓库到本地

 git clone http://git.zhang.mba/zhangzhiqi/test1.git

 

图形化的方式查看git的分支信息,以及文件提交信息。

gitk --all

 

创建新分支

git branch 分支名

 

切换到新分支

git checkout 分支名

 

创建并切换到新分支

git checkout -b 新分支

 

查看当前在哪个分支(带*号的),或查看所有的分支:

git branch

 

合并分支

git merge 被合并的分支

 

从Git服务器拉取分支代码

git pull

 

推送分支代码到Git服务器

git push
git push origin master
//master 可以换成任何想要推送的分支

 

删除分支

git branch -D 分支名

 

 

 

其他Git知识:

Git基础

git [git] 是一个分布式的版本控制系统。官方网站地址:https://git-scm.com/

一. 简介

Linux操作系统有着众多的开发者共同参与开发。一开始该项目使用Bitkeeper来管理和维护代码,2005年的时候,Bitkeeper不再免费使用,这就迫使着Linux开源社区开发一套自己的版本控制系统。

自2005年诞生以来,Git日臻完善,它的速度飞快,特别适合大型项目的开发,还有着令人难以执行的非线性分支管理系统,可以应对各种复杂的项目的开发。

1.1 Git的工作模式

我们自己的计算机从版本服务器同步代码,日常开发的过程中90%以上的操作都是在本地计算机,在本地操作完成后需要推送到远程服务器。

Git的工作模式

1.2 Git的三种工作状态

已修改(modified)

已暂存(staged)

已提交(commited)

Git的三种工作状态

1.3 本地库与服务器库

本地库与服务器库

二. Git的基本命令

    git init : 初始化仓库(需要记)

git status : 查看工作空间的状态(需要记)

git add a.txt : 将已修改的文件纳入到暂存区。(需要记)

git add -A : 将所有的已修改的文件纳入到暂存区 (不用记)

git add -h : 查看git add 所有的参数 (需要记)

git rm --cached a.txt : 将a.txt从暂存区移除,首次初始化提交的时候才会使用到(不用记)

git commit -m 'first comit' : 将暂存区的内容提交到本地版本库 (需要记)

git log : 查看提交历史信息 (需要记)

git log -3 : 查看最近3条提交信息(需要记)

git log --oneline :  将提交日志信息按行显示。(不用记)

git log --pretty=format:"%h - %an, %ar : %s" : 按照指定的格式输出。(不用记)

git checkout -- a.txt : 撤销删除或者更新文件 (不用记)

git reset HEAD a.txt : 将已追踪的文件从暂存区移除。(不用记)

git commit --amend -m 'new msg' : 修正提交信息。 (需要记)

git commit -am 'msg' : 将git add 与 git commit两条命令进行合并(需要记)

git log --graph --oneline : 查看日志的简单图形化信息(需要记)

三. 修改用户信息

在提交信息的时候回提示设置用户名和邮件,设置该信息可以在两个地方进行设置:

    C:\Users\Administrator\.gitconfig  全局设置

.git\config  局部设置,不同的项目情况下使用

设置全局的信息使用如下命令:

    git config --global user.email "zou@qq.com"

git config --global user.name "miller"

设置局部信息使用如下命令:

    git config --local user.email "zou@qq.com"

git config --local user.name "miller"

四. git rm与rm的区别

使用 rm 命令删除文件,如下:

 rm 命令删除文件

使用 git rm 删除文件,如下:

git rm 删除文件

rm是操作系统级别的命令,只是将文件从工作区移除, 被删除的文件并没有纳入到暂存区;而git rm命令实际上是由两个命令(rm和git add)合成的,git rm删除了工作区的文件,并将删除的文件纳入到暂存区。

当使用rm命令删除文件的时候,只需要通过 git checkout a.txt 即可撤销删除;而通过git rm命令删除文件,需要通过两个命令撤销修改,这两个命令一次为 git reset HEAD 和 git checkout file.

五. .gitignore

在Git中,有些文件或者文件夹并不需要纳入到版本控制系统,例如maven编译后的target目录,ide的配置文件,所以Git提供了一个非常优秀的解决方案,就是.gitignore。需要在Git的版本库中创建一个名为.gitignore的文件,文件的语法如下:

settings.xml     #将同级目录下的settings.xml文件忽略

/target          #忽略/target目录以及所有的子目录和文件

/*/test          #忽略掉/abc/test  /def/test,但是不能忽略掉/a/b/test

/*/*.iml         #忽略掉/abc/a.iml /def/bcd.iml,但是不能忽略掉/a/b/cde.iml

/*.java          #忽略掉User.java, 但是不能忽略/com/Person.java

/debug/*.java    #忽略掉/debug/A.java, 但是不能忽略掉/debug/a/C.java

*.log            #忽略掉所有的以log结尾的文件

bin/             #会忽略bin目录以及所有的子目录,但如果bin是文件则不忽略

六. 分支

    git branch : 查看所有的分支,以及当前所处的分支

git branch testing :  创建testing分支

git branch testing d7e347 : 创建一个分支指向d7e347这个提交。

git checkout testing :  切换到testing分支

git checkout -b parent : 创建parent分支,并切换到parent分支

git branch -d parent : 删除parent分支

git merge testing : 将testing分支合并到当前分支。

gitk --all : 图形化的方式查看git的分支信息,以及对文件提交信息。

git log --graph --oneline --all : 图形化的方式展示分支信息。

git branch -m testing testing1 : 将testing分支的名字改为testing1.

图形化的方式展示分支信息

6.1 Git提交的原理

Git每次在提交的时候,会生成一个提交对象,那么这个新生成的提交对象有一个指针,该指针会指向上一次的提交对象,如下图所示:

Git提交的原理

6.2 分支的原理

Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 它会在每次的提交操作中自动向前移动。Git 的 master 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它,并且大多数人都懒得去改动它。

如下图所示,master分支执行f30ab这个提交,而HEAD指向了master,意思是当前用户所处的分支是master.

HEAD其实就是一个指针,指向的是当前用户所处的分支,可以在.git这个目录下的HEAD文件中查看到信息。

A. 使用 git branch testing 这个命令会创建一个testing分支,此时testing分支和master分支指向的是同一个提交,如下图所示:

B. 当使用git checkout testing 这个命令,会切换到testing这个分支,此时HEAD会指向testing,如下图:

C. 当在testing这个分支,编辑某个文件并提交。此时testing这个分支执行的是最新的提交,而master还是指向上次一的提交,如下图:

D. 再次切换到master这个分支,编辑某个文件并提交。此时master指向的是另外一个提交,如下图:

E. 此时用 git log --all --graph 看到的结果如下图所示:

6.3 分支的合并

在master分支执行 git merge testing 命令会出现冲突,如下图:

冲突的原因是因为,有master和testing这两个分支最新的提交的上一次提交指向同一个提交,这种情况可能会导致冲突,该冲突需要手动的修改文件,此时文件内容如下图:

修改文件的内容后,执行 git add a.txt 和  git commit -m 'merge completed' 即可完成合并。

此时分支的形式如下:

七. 版本的回退

    git reset --hard HEAD^ : 回到上一个版本。

git reset --hard HEAD^^: 回到上两个版本。

git reset --hard HEAD~5: 回到上5个版本。

git reset --hard f1f52: 回到一个固定的版本, f1f52为commit_id的前几位,只要能够保证唯一性就可以。

查看所有的操作日志命令: git reflog

八. 保存工作现场

当我们正在某个分支上工作的时候,而功能并没有完善,又或者代码没有编写完成,此时也不能提交。而被领导要求在其他分支上进行操作,在其他分支上也可以看到修改状态,可能造成在其他分支上误操作导致提交。这个时候就需要用到工作现场。

    git stash: 保存工作现场。

git stash list: 查看所有的工作现场。

git stash pop: 弹出工作现场,并将工作现场从stash中删除。

git stash apply: stash中的内容并不会删除,需要通过 stash drop stash@{0} 删除工作现场。

git stash apply stash@{0}: 直接开始运用指定的工作现场。

九. 标签与diff

9.1 标签

标签的作用是当项目发布一个里程碑的时候,给其一个做个标记,往往用来指定版本。标签的命令如下:

    git tag v1.0: 创建一个V1.0的标签。

git tag: 查看所有的标签

git tag -d v1.0: 删除v1.0这个标签

9.2 diff

diff命令是源于linux操作系统中的命令,用于查看两个文件中的区别,git也提供了该功能,命令如下:

    git diff: 查看暂存区与工作区的文件的区别

git diff HEAD:  查看版本库最新一次提交的与工作区间的差异

git diff ba8dc34c: 查看指定提交与工作区间的差异

git diff --cached: 查看版本库与暂存区间文件的差异

其他命令

        git checkout 79af3: 切换到79af3这个提交点。

git blame a.txt: 追踪a.txt这个文件的提交信息。

命令的区别:

    git checkout dev : 切换分支。

git checkout -- a.txt: 丢弃掉工作目录中相对于上一次添加到暂存区的修改。

git add a.txt: A. 将a.txt文件纳入到暂存区;B. 当合并操作的时候,表示已经合并完成。

pc@BDT-001 MINGW64 /d/gitLearn
$ git status
fatal: not a git repository (or any of the parent directories): .git

pc@BDT-001 MINGW64 /d/gitLearn
$ ll
total 0
drwxr-xr-x 1 pc 197121 0 May 16 09:28 zhang/

pc@BDT-001 MINGW64 /d/gitLearn
$ cd zhang

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ ll
total 4
-rw-r--r-- 1 pc 197121 641 May 16 09:28 dfsdfee
-rw-r--r-- 1 pc 197121 116 May 16 09:19 index.html
-rw-r--r-- 1 pc 197121 4 May 16 09:15 three.html
-rw-r--r-- 1 pc 197121 4 May 16 09:15 two.html

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
dfsdfee

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

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ rm dfsdfee

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git status
On branch master
nothing to commit, working tree clean

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git log
commit 394c942e4fc1fd80a296fb0efe58f13b22bd4bd3 (HEAD -> master)
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 09:27:01 2022 +0800

five commit

commit 7bebf157efe6df2e358131a331429a187c6f52b1
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 09:18:57 2022 +0800

four

commit 35bde27985f14fa322916bf631492682b1ad2449
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 08:58:14 2022 +0800

git two commit

commit 16dc50a9c736c7110c54c37685b6fb046eca30c4
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 08:57:22 2022 +0800

git first commit

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ ll
total 3
-rw-r--r-- 1 pc 197121 116 May 16 09:19 index.html
-rw-r--r-- 1 pc 197121 4 May 16 09:15 three.html
-rw-r--r-- 1 pc 197121 4 May 16 09:15 two.html

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ vim ini.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ vim class.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ vim h.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ vim q.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git add ini.txt
fatal: pathspec 'ini.txt' did not match any files

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ ll
total 3
-rw-r--r-- 1 pc 197121 116 May 16 09:19 index.html
-rw-r--r-- 1 pc 197121 4 May 16 09:15 three.html
-rw-r--r-- 1 pc 197121 4 May 16 09:15 two.html

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ vim ini.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ vim class.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ vim h.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ vim q.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ ll
total 7
-rw-r--r-- 1 pc 197121 7 May 16 09:32 class.txt
-rw-r--r-- 1 pc 197121 8 May 16 09:33 h.txt
-rw-r--r-- 1 pc 197121 116 May 16 09:19 index.html
-rw-r--r-- 1 pc 197121 5 May 16 09:32 ini.txt
-rw-r--r-- 1 pc 197121 3 May 16 09:33 q.txt
-rw-r--r-- 1 pc 197121 4 May 16 09:15 three.html
-rw-r--r-- 1 pc 197121 4 May 16 09:15 two.html

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git add ini.txt
warning: LF will be replaced by CRLF in ini.txt.
The file will have its original line endings in your working directory

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git commit -m "项目初始化了"
[master 368cc1e] 项目初始化了
1 file changed, 1 insertion(+)
create mode 100644 ini.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git add class.txt
warning: LF will be replaced by CRLF in class.txt.
The file will have its original line endings in your working directory

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git commit -m "类全部初始化了!"
[master fda7a9a] 类全部初始化了!
1 file changed, 1 insertion(+)
create mode 100644 class.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git add h.txt
warning: LF will be replaced by CRLF in h.txt.
The file will have its original line endings in your working directory

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git commit -m "后台写完了"
[master 647aa49] 后台写完了
1 file changed, 1 insertion(+)
create mode 100644 h.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git add q.txt
warning: LF will be replaced by CRLF in q.txt.
The file will have its original line endings in your working directory

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git commit -m "前台写完了!!"
[master d2ecf32] 前台写完了!!
1 file changed, 1 insertion(+)
create mode 100644 q.txt

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
$ git log
commit d2ecf321f134fd70b8b60ed36810398c74724e34 (HEAD -> master)
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 09:35:13 2022 +0800

前台写完了!!

commit 647aa49aeb82801c5b5ca81ef92e21489287bb2a
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 09:34:50 2022 +0800

后台写完了

commit fda7a9a7f2b4a6ebd630957add5042b252f3b255
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 09:34:19 2022 +0800

类全部初始化了!

commit 368cc1e8571517034cde9a45abf724addfcf9733
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 09:33:43 2022 +0800

项目初始化了

commit 394c942e4fc1fd80a296fb0efe58f13b22bd4bd3
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 09:27:01 2022 +0800

five commit

commit 7bebf157efe6df2e358131a331429a187c6f52b1
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 09:18:57 2022 +0800

four

commit 35bde27985f14fa322916bf631492682b1ad2449
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 08:58:14 2022 +0800

git two commit

commit 16dc50a9c736c7110c54c37685b6fb046eca30c4
Author: unknown <zhang@zhang.mba>
Date: Mon May 16 08:57:22 2022 +0800

git first commit

pc@BDT-001 MINGW64 /d/gitLearn/zhang (master)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇