Git使用——Windows平台上配置使用

Git官方书籍地址

https://git-scm.com/book/zh/v2

一、安装完毕,在桌面或者开始菜单中找到"Git Bash"打开

1.1 版本信息

git --version    ; 查看安装位置 : where git

1.2 用户信息

配置个人的用户名称和电子邮件地址:

$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com--global user.name "runoob"
$ git config --global user.email test@runoob.com

注意:如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

修改账号、邮箱命令:

以下是修改本地一个仓库的用户名和邮箱

//查看本目录下仓库的邮箱 ; 查看本目录下仓库的用户名

git config user.email                 git config user.name

//修改本目录下仓库的邮箱 ; 修改本目录下仓库的用户名

git config user.email "邮箱"        git config user.name "用户名"

---------------------------------------------------------------------------------

开始修改全局仓库的用户名和邮箱

//查看全局仓库下用户名和邮箱

git config --global user.email

git config --global user.name

//修改全局仓库下用户名和邮箱

git config --global user.email   “邮箱”

git config --global user.name  “用户名”

1.3 文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::

$ git config --global core.editor emacs--global core.editor emacs

1.4 差异分析工具

还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

$ git config --global merge.tool vimdiff--global merge.tool vimdiff

Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。

当然,你也可以指定使用自己开发的工具,具体怎么做可以参阅第七章。

1.5 查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list
http.postbuffer=2M
user.name=runoob
user.email=test@runoob.com--list
http.postbuffer=2M
user.name=runoob
user.email=test@runoob.com

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。

这些配置我们也可以在 ~/.gitconfig 或 /etc/gitconfig 看到,如下所示:

vim ~/.gitconfig ~/.gitconfig 

显示内容如下所示:

[http]
    postBuffer = 2M
[user]
    name = runoob
    email = test@runoob.comhttp]
    postBuffer = 2M
[user]
    name = runoob
    email = test@runoob.com

二、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.phpOn 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,可以这么运行:

 
  1. $ git remote rename pb paul

  2. $ git remote

  3. origin

  4. paul

注意,对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了paul/master

碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行 git remote rm 命令:

 
  1. $ git remote rm paul

  2. $ git remote

  3. origin

猜你喜欢

转载自blog.csdn.net/qq_39387475/article/details/80654986