git常用操作

本文介绍了Git环境配置、客户端安装及基本操作,包括初始化、克隆项目、远程主机管理、分支创建与合并、文件检出及日志查看等。重点讲述了git fetch、git pull、git push等命令的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Git 环境设置(安装)

Git客户端安装

如果使用的是GNU/ Linux 发行版Debian基本apt-get命令就可以搞定一切。

[ubuntu ~]$ sudo apt-get install git-core
[ubuntu ~]$ git --version
git version 1.8.1.2

如果使用的是基于RPM的GNU/ Linux发行版使用yum命令,如下:

[CentOS ~]# yum -y install git-core
[CentOS ~]# git --version
git version 1.7.1

自定义Git环境

设置用户名

$ git config --global user.name "wuseyukui"

设置电子邮件ID

$ git config --global user.email "wuseyukui@163.com"

设置默认编辑器

$ git config --global core.editor vim

设置默认的合并工具

$ git config --global merge.tool vimdiff

获取与创建项目

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

git clone :拷贝一个 Git 仓库到本地

git remote详解

为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

不带选项的时候,git remote命令列出所有远程主机。

$ git remote
origin

使用-v选项,可以参看远程主机的网址。

$ git remote -v
origin  git@github.com:jquery/jquery.git (fetch)
origin  git@github.com:jquery/jquery.git (push)

上面命令表示,当前只有一台远程主机,叫做origin,以及它的网址。

克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

$ git clone -o jQuery https://github.com/jquery/jquery.git
$ git remote
jQuery

上面命令表示,克隆的时候,指定远程主机叫做jQuery。

git remote show命令加上主机名,可以查看该主机的详细信息。

$ git remote show <主机名>

git remote add命令用于添加远程主机。

$ git remote add <主机名> <网址>

git remote rm命令用于删除远程主机。

$ git remote rm <主机名>

git remote rename命令用于远程主机的改名。

$ git remote rename <原主机名> <新主机名>

git branch

git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。

$ git branch -r
origin/master           // 远程分支

$ git branch -a
* master                // 本地分支,当前分支
  remotes/origin/master // 远程分支

git branch newBrach // 创建新分支

上面命令表示,本地主机的当前分支是master,远程分支是origin/master。

git fetch详解

一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。git fetch只是将更新取回到本地,并没有与本地分支合并,合并代码需要使用git merge/git rebase命令完成

$ git fetch <远程主机名>

上面命令将某个远程主机的更新,全部取回本地。

默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

$ git fetch <远程主机名> <分支名>

所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin主机的master,就要用origin/master读取。

两个应用场景:

1、取回远程主机的更新以后,可以在它的基础上创建一个新的分支。

git branch newBrach // 创建新分支
git checkout newBrach // 切换到新分支

上面两个命令也可以合成为一个命令:

$ git checkout -b newBrach origin/master

上面命令表示,在origin/master的基础上,创建一个新分支。

2、使用git merge命令或者git rebase命令,在本地分支上合并远程分支。

$ git merge origin/master
# 或者
$ git rebase origin/master

上面命令表示在当前分支上,合并origin/master。

git checkout

git checkout除了上面可以切换分支,还可以从远程仓库检出文件。

git checkout 分支名 -- a.jsp文件的完整相对路径

也可省略为:

git checkout a.jsp
git checkout . // 当前目录

git pull详情

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。

$ git pull <远程主机名> <远程分支名>:<本地分支名>

比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

$ git pull origin next:master

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge

#将远端的数据拉到本地仓库,并不自动合并到当前工作分支(获取远程仓库最新信息)
$ git fetch origin
#将拉到的数据合并到当前分支
$ git merge origin/next

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。

Git也允许手动建立追踪关系。

git branch --set-upstream master origin/next

上面命令指定master分支追踪origin/next分支

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

$ git pull origin

上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。

如果当前分支只有一个追踪分支,连远程主机名都可以省略。

$ git pull

上面命令表示,当前分支自动与唯一一个追踪分支进行合并。

如果合并需要采用rebase模式,可以使用–rebase选项。

$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

git push详解

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。

$ git push <远程主机名> <本地分支名>:<远程分支名>

注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin :master
# 等同于
$ git push origin --delete master

上面命令表示删除origin主机的master分支。

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

$ git push origin

上面命令表示,将当前分支推送到origin主机的对应分支。

如果当前分支只有一个追踪分支,那么主机名都可以省略。

$ git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

$ git push -u origin master

上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

$ git config --global push.default matching
# 或者
$ git config --global push.default simple

还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。

$ git push --all origin

上面命令表示,将所有本地分支都推送到origin主机。

如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项。

$ git push --force origin

上面命令使用–force选项,结果导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用–force选项。

最后,git push不会推送标签(tag),除非使用–tags选项。

$ git push origin --tags

git reset 恢复之前版本

git reset --hard 目标版本号

git rm详解

第一步:
git rm -rf -n“target/*”
git rm -rf -n --cached“target/*” :-n:加上这个参数,执行命令时,是不会删除任何文件,而是展示此命令要删除的文件列表预览。

git rm -rf“test.txt”
git rm -rf --cached“test.txt”:最终执行命令.

第二步:
git commit -m "注释"

第三步:
git push origin 提交到远程仓库

本地文件被删除了,但仓库中未删除,如何还原文件?

git checkout .

git diff命令详解

HEAD     commit版本
Index    staged版本

git diff
比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异,也就是修改之后还没有add暂存起来的变化内容。

git diff --cached
git diff --staged
查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异,也就是下一次commit时会提交到HEAD的内容。

git diff HEAD
显示工作目录(Working tree)和HEAD的差别。

git diff HEAD^ HEAD
比较上次提交commit和上上次提交

**git diff SHA1(版本号1) SHA2(版本号2) **
比较两个历史版本之间的差异

git diff branch1 branch2
直接将两个分支上最新的提交做diff

比较本地分支版本和远程版本的不同

假定远端库名为 origin, 你要比较的本地分支为 test, 远端分支为 master

# 获取远端库最新信息
$ git fetch origin
 
# 做diff
$ git diff test origin/master

查看仓库操作日志

查看日志详情

$ git log

上面的命令会产生以下结果:

commit fb06f1226a8e957d30adcb47f58a6fa0203328d2
Author: wuseyukui <672180720@qq.com>
Date:   Thu Nov 3 17:46:45 2016 +0800

    update2

使用git show命令查看提交的细节。

$ git show fb06f1226a8e957d30adcb47f58a6fa0203328d2

上面的命令会产生以下结果:

Author: wuseyukui <672180720@qq.com>
Date:   Thu Nov 3 17:46:45 2016 +0800

    update2

diff --git a/taotao-manager/taotao-manager-web/src/main/java/com/taotao/manager/controller/PicUploadController.java b/taotao-manager/taotao-manager-web/src/main/java/com/taotao/manager/controller/PicUploadController.java
index 638ed44..8c0cef1 100644
--- a/taotao-manager/taotao-manager-web/src/main/java/com/taotao/manager/controller/PicUploadController.java
+++ b/taotao-manager/taotao-manager-web/src/main/java/com/taotao/manager/controller/PicUploadController.java
@@ -127,7 +127,8 @@ public class PicUploadController {
         }
         // 生成新的文件名
         String fileName = new DateTime(nowDate).toString("yyyyMMddhhmmssSSSS")
-                + RandomUtils.nextInt(100, 9999) + "." + StringUtils.substringAfterLast(sourceFileName, ".");
+                + RandomUtils.nextInt(100, 9999)
+                + "." + StringUtils.substringAfterLast(sourceFileName, ".");
         return fileFolder + File.separator + fileName;
     }

查看远程仓库的日志

本地仓库没有更新(git remote update),不可能看到远端仓库的log(git log origin/master)
如果只是不希望影响到本地仓库的代码(远端与本地做merge),可以按如下命令来做:

# 本地仓库更新,拿到远端的所有元数据
git remote update

# $BRANCH就是远端分支branch
git log origin/$BRANCH       

.gitignore

如果不希望某个文件或目录被提交到仓库,则在项目根目录下,和.git 同级目录下,新建一个**.gitignore**文件,内容参考如下:

###Java###

# Java class files
*.class

# generated files
bin/
gen/

###Maven###

target/


###Eclipse###

.metadata/
.recommenders/
RemoteSystemsTempFiles/
Servers/


# Eclipse project files
.classpath
.project

*.pydevproject
.project
.metadata
bin/**
tmp/**
tmp/**/*
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/
.loadpath

# External tool builders
.externalToolBuilders/

# Locally stored "Eclipse launch configurations"
*.launch

Git分支

在 Git 中提交时,会保存一个提交(commit)对象。
这里写图片描述

Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。Git 会使用 master 作为分支的默认名字。

创建一个新的分支指针。比如新建一个 testing 分支,可以使用 git branch 命令:

$ git branch testing

这里写图片描述

Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为 HEAD 的特别指针。它是一个指向你正在工作中的本地分支的指针(译注:将 HEAD 想象为当前分支的别名。)。运行git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去,所以如上图,我们依然还在 master 分支里工作。

要切换到其他分支,可以执行 git checkout 命令。我们现在转换到新建的 testing 分支:

$ git checkout testing

这样 HEAD 就指向了 testing 分支,如下图:
这里写图片描述

更多关于Git的参考文章:

常用 Git 命令清单这一篇就够啦!

Git详解之三 Git分支

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值