大家好,又见面了,我是你们的朋友全栈君。
原文地址
https://blog.csdn.net/zx1996119/article/details/80814752
下载地址:https://git-scm.com/downloads
Git官方书籍地址:https://git-scm.com/book/zh/v2
一、Git 下载、安装和配置
如图:
这里下载完成后是酱子的如图(windows 64位的)
1.双击打开后,点击Next
2.再次点击Next(这里我改了安装的路径)
3.下图方框中勾选,表示是否创建桌面应用,之后点击Next
4.这里是是否创建开始菜单栏git文件夹
5.点击Next
6.第一个表示使用git自带的命令行工具(git Bash)
第二个表示使用Windows的命令行工具(cmd)
第三个表示两者都行,但是第三种方式需要修改一些设置
楼主这里就选择第一种的了
7.这里是传输协议,第一个为https协议,第二个为ssl协议
8.第一个表示跨windows平台的项目
第二个表示unix平台的项目
第三个表示非跨平台的项目
9.点击Next
10.默认配置选择就行
11.安装中
12.安装完成,点击Finish即可
检查是否安装成功,开始菜单栏里面如图:
点击Git Bash,则表示安装成功
接下来就是我们配置git帐号和邮箱(作为一个标识)
下面是一些配置语法:
要检查已有的配置信息,可以使用 git config –list 命令:
git config –global user.name “” 设置全局用户名
git config –global user.email “” 设置全局邮箱
注意:如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
修改账号、邮箱命令:
以下是修改本地一个仓库的用户名和邮箱
//查看本目录下仓库的用户名
git config user.name
//修改本目录下仓库的用户名
git config user.name “用户名”
//查看本目录下仓库的邮箱 ;
git config user.email
//修改本目录下仓库的邮箱 ;
git config user.email “邮箱”
———————————————————————————
开始修改全局仓库的用户名和邮箱
//查看全局仓库下用户名和邮箱
git config –global user.name
git config –global user.email
//修改全局仓库下用户名和邮箱
git config –global user.name “用户名”
git config –global user.email “邮箱”
———————————————————————————
删除全局配置项
(1)终端执行命令:
git config --global --unset user.name
(2)编辑配置文件:
git config --global --edit
以下内容作为了解项目
二、Git 工作区、暂存区和版本库
基本概念
我们先来理解下Git 工作区、暂存区和版本库概念
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage, index),标记为 “master” 的是 master 分支所代表的目录树。
图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个”游标”。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。
当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
当执行 “git rm –cached <file>” 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 “git checkout .” 或者 “git checkout — <file>” 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
当执行 “git checkout HEAD .” 或者 “git checkout HEAD <file>” 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
三、Git 基本操作:Git 创建仓库(本地仓库、远程仓库)
Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。
3.1 git init
在一个文件夹下Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。
在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。
使用方法
情况 1、使用当前目录作为Git仓库,我们只需使它初始化。
<span style="color:#000000">git init</span>
该命令执行完后会在当前目录生成一个 .git 目录。
情况 2、使用我们指定目录作为Git仓库。
<span style="color:#000000">git init newrepo</span>
初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
例如:在本地的D盘创建一个lianshou项目
$ mkdir liabshou
$ cd lianshou/
$ git init
/
$ git init
3.2 git clone
注意:有时候有些电脑上网使用代理,可以在Git中设置
情况1、单独为一个工作空间设置Git上网代理
git config –local http.proxy 10.20.151.226:8080
情况2、为全局设置代理(一般不需要,可以跳过此步)
git config –global http.proxy 192.168.4.12:8080
我们使用 git clone 从现有远程 Git 仓库中拷贝项目(类似 svn checkout)。一般情况下在码云上新建项目的时候不要初始化,这样新建完项目之后会有git命令提示。
克隆仓库的命令格式为:
git clone <repo>
<repo>
如果我们需要克隆到指定的目录,可以使用以下命令格式:
git clone <repo> <directory>
<repo> <directory>
参数说明:
- repo:Git 仓库。
- directory:本地目录。
比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:这是一个ssh协议的,需要公钥
$ git clone git://github.com/schacon/grit.git
://github.com/schacon/grit.git
执行该命令后,会让输入账号和密码,此时的账号会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。
如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:
$ git clone git://github.com/schacon/grit.git mygrit
://github.com/schacon/grit.git mygrit
检出仓库:$ git clone git://github.com/jquery/jquery.git
https://gitee.com/waicai/lianshou.git
查看远程仓库:$ git remote -v
添加远程仓库:$ git remote add [name] [url]
删除远程仓库:$ git remote rm [name]
修改远程仓库:$ git remote set-url –push [name] [newUrl]
拉取远程仓库:$ git pull [remoteName] [localBranchName]
推送远程仓库:$ git push [remoteName] [localBranchName]
3.3 基本快照
git add
git add 命令可将该文件添加到缓存,如我们添加以下两个文件:
$ touch README
$ touch hello.php
$ ls
README hello.php
$ git status -s
?? README
?? hello.php
$
.php
$ ls
README hello.php
$ git status -s
?? README
?? hello.php
$
git status 命令用于查看项目的当前状态。接下来我们执行 git add 命令来添加文件:
$ git add README hello.php
.php
现在我们再执行 git status,就可以看到这两个文件已经加到暂存区了。
$ git status -s
A README
A hello.php
$
-s
A README
A hello.php
$
新项目中,添加所有文件很普遍,我们可以使用 git add . 命令来添加当前项目的所有文件。现在我们修改 README 文件:
<span style="color:#000000">$ vim README</span>
在 README 添加以下内容:# Runoob Git 测试,然后保存退出。再执行一下 git status:
$ git status -s
AM README
A hello.php
-s
AM README
A hello.php
“AM” 状态的意思是,这个文件在我们将它添加到缓存之后又有改动。改动后我们在执行 git add 命令将其添加到缓存中:
$ git add .
$ git status -s
A README
A hello.php
.
$ git status -s
A README
A hello.php
当你要将你的修改包含在即将提交的快照里的时候,需要执行 git add。
git status
git status 以查看在你上次提交之后是否有修改。加 -s 参数,以获得简短的结果输出。如果没加该参数会详细输出内容:
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README
new file: hello.php
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README
new file: hello.php
git diff
执行 git diff 来查看执行 git status 的结果的详细信息。
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。
- 尚未缓存的改动:git diff
- 查看已缓存的改动: git diff –cached
- 查看已缓存的与未缓存的所有改动:git diff HEAD
- 显示摘要而非整个 diff:git diff –stat
在 hello.txt 文件中输入以下内容:
<?php
echo '菜鸟教程:www.runoob.com';
?>
php
echo '菜鸟教程:www.runoob.com';
?>
$ git status -s
A README
AM hello.php
$ git diff
diff --git a/hello.php b/hello.php
index e69de29..69b5711 100644
--- a/hello.php
+++ b/hello.php
@@ -0,0 +1,3 @@
+<?php
+echo '菜鸟教程:www.runoob.com';
+?>
-s
A README
AM hello.php
$ git diff
diff --git a/hello.php b/hello.php
index e69de29..69b5711 100644
--- a/hello.php
+++ b/hello.php
@@ -0,0 +1,3 @@
+<?php
+echo '菜鸟教程:www.runoob.com';
+?>
git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是啥。
接下来我们来查看下 git diff –cached 的执行效果:
$ git add hello.php
$ git status -s
A README
A hello.php
$ git diff --cached
diff --git a/README b/README
new file mode 100644
index 0000000..8f87495
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+# Runoob Git 测试
diff --git a/hello.php b/hello.php
new file mode 100644
index 0000000..69b5711
--- /dev/null
+++ b/hello.php
@@ -0,0 +1,3 @@
+<?php
+echo '菜鸟教程:www.runoob.com';
+?>
.php
$ git status -s
A README
A hello.php
$ git diff --cached
diff --git a/README b/README
new file mode 100644
index 0000000..8f87495
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+# Runoob Git 测试
diff --git a/hello.php b/hello.php
new file mode 100644
index 0000000..69b5711
--- /dev/null
+++ b/hello.php
@@ -0,0 +1,3 @@
+<?php
+echo '菜鸟教程:www.runoob.com';
+?>
git commit
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
接下来我们写入缓存,并提交对 hello.php 的所有改动。在首个例子中,我们使用 -m 选项以在命令行中提供提交注释。
$ git add hello.php
$ git status -s
A README
A hello.php
$ git commit -m '第一次版本提交' 或者 git commit -m "first commit"
[master (root-commit) d32cf1f] 第一次版本提交
2 files changed, 4 insertions(+)
create mode 100644 README
create mode 100644 hello.php
.php
$ git status -s
A README
A hello.php
$ git commit -m '第一次版本提交' 或者 git commit -m "first commit"
[master (root-commit) d32cf1f] 第一次版本提交
2 files changed, 4 insertions(+)
create mode 100644 README
create mode 100644 hello.php
现在我们已经记录了快照。如果我们再执行 git status:
$ git status
# On branch master
nothing to commit (working directory clean)
# On branch master
nothing to commit (working directory clean)
以上输出说明我们在最近一次提交之后,没有做任何改动,是一个”working directory clean:干净的工作目录”。
如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。屏幕会像这样:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: hello.php
#
~
~
".git/COMMIT_EDITMSG" 9L, 257C
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: hello.php
#
~
~
".git/COMMIT_EDITMSG" 9L, 257C
如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。命令格式如下:
git commit -a
-a
我们先修改 hello.php 文件为以下内容:
<?php
echo '菜鸟教程:www.runoob.com';
echo '菜鸟教程:www.runoob.com';
?>
php
echo '菜鸟教程:www.runoob.com';
echo '菜鸟教程:www.runoob.com';
?>
再执行以下命令:
git commit -am '修改 hello.php 文件'
[master 71ee2cb] 修改 hello.php 文件
1 file changed, 1 insertion(+)
-am '修改 hello.php 文件'
[master 71ee2cb] 修改 hello.php 文件
1 file changed, 1 insertion(+)
git reset HEAD
…………………………………………….
git rm
如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以用以下命令完成此项工作
git rm <file>
<file>
1、如果本地新建一个文件,并未添加到暂存区
正常的删除命令: rm <file>
2、如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm -f <file>
-f <file>
例如:我们删除工作区的 hello.php文件:
$ git rm hello.php
rm 'hello.php'
$ ls
README
.php
rm 'hello.php'
$ ls
README
2.1 删除本地之后,想再次获取,直接从暂存区获取文件
checkout <file>
可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:进入某个目录中,执行此语句,会删除该目录下的所 有文件和子目录。
git rm –r *
–r *
3、如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 –cached 选项即可
git rm --cached <file>
--cached <file>
例如不从工作区中,只删除暂存区的文件:
$ git rm --cached README
rm 'README'
$ ls
README
--cached README
rm 'README'
$ ls
README
4、删除本地、暂存区、远程仓库中的文件
进入到我们的git命令行页面后,先将远程代码pull到本地,保持本地仓库跟远端仓库同步;
然后我们使用git rm命令删掉要删除的文件。具体命令是 git rm 文件名;
删除之后,本地目录下已经删除的文件夹就不再存在了,为了能将远程仓库的相应文件也删除掉,我们要把这次操作提交到上去,git commit -m “for test”
可以看到代码中显示我们删掉了README文件,然后将更改push到远程,git push <远程仓库>
git mv
git mv 命令用于移动或重命名一个文件、目录、软连接。
我们先把刚移除的 README 添加回来:
<span style="color:#000000">$ git add README </span>
然后对其重名:
$ git mv README README.md
$ ls
README.md
.md
$ ls
README.md
git – 远程仓库的删除和重命名
在新版 Git 中可以用 git remote rename
命令修改某个远程仓库在本地的简称,比如想把 pb
改成paul
,可以这么运行:
-
$ git remote rename pb paul
-
$ git remote
-
origin
-
paul
注意,对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master
分支现在成了paul/master
。
碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行 git remote rm
命令:
-
$ git remote rm paul
-
$ git remote
-
origin
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133250.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...