热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(二)git基础

(二)git学习获取帮助git环境配置1.配置文件2.常用配置3.查看配置git基础1.获取一个仓库2.跟踪文件3.查看修改纪录4.撤销操作5.远程仓库


(二)git学习

      • 获取帮助
      • git环境配置
          • 1. 配置文件
          • 2.常用配置
          • 3.查看配置
      • git基础
          • 1. 获取一个仓库
          • 2. 跟踪文件
          • 3.查看修改纪录
          • 4.撤销操作
          • 5.远程仓库的使用
          • 6.打标签
          • 7.git别名


获取帮助


  • git help
    获取git命令的简要描述
  • man git
    获取git的详细描述
  • 获取单个命令的详细描述
    git help cmd,git help config
  • 获取单个命令的简要描述
    git cmd -h或者git cmd --help
    例如:git add -h 或 git add --help

git环境配置


1. 配置文件

1、/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
2、~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
3、当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。

每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。在 Windows 系统中,Git 会查找 $HOME 目录下(一般情况下是 C:\Users\$USER)的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。


2.常用配置

用户信息

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

文本编辑器

$ git config --global core.editor emacs

3.查看配置

检查配置信息

$ git config --list
user.name=John Doe
user.email=johndoe@example.com
color.status=auto
color.branch=auto
color.interactive=auto

查看某一项配置

// git config
$ git config user.name
John Doe

git基础


1. 获取一个仓库

创建一个仓库
在要建立为仓库的目录下执行

git init

注意: 当服务器端仓库初始创建为空仓库时,本地仓库更新添加文件,在初始化仓库时需加上–bare,否则,本地仓库push文件时,会出如下错误

$ git commit -m "adfa"
[master (root-commit) 4a52dab] adfa1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 file1
binn@ubuntu:~/error_test$ git push origin master
git@192.168.132.24's password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 198 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To git@192.168.132.24:/home/git_server/error! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'git@192.168.132.24:/home/git_server/error'

根据提示也可以解决该问题,但是不是最佳方案。

克隆一个仓库

git clone url

例如:

git clone https://github.com/libgit2/libgit2

克隆一个和远端一样的仓库,或

git clone https://github.com/libgit2/libgit2 mylibgit

克隆一个仅仓库名不同,其他相同的仓库


2. 跟踪文件

文件的状态变化周期
在这里插入图片描述
查看状态

git status

状态简要展示

git status -s

添加跟踪文件

git add 目录或文件

忽略文件
在某个目录下添加.gitignore文件,文件内容格式规则:


  • 所有空行或者以“#”开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式可以以“/”开头防止递归。
  • 匹配模式可以以“/”结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号“!”取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。
.gitignore 文件的例子:

# 不跟踪以.a结束的文件
*.a# 上一个规则的例外,除了lib.a,其他都不跟踪
!lib.a# 仅忽略当前目录下TODO文件夹,其他文件夹的子文件夹不受影响
/TODO# 忽略所有build目录
build/# 忽略doc目录下的txt文件,不影响doc子目录下的txt文件,如doc/server/1.txt
doc/*.txt# 忽略所有doc目录下的pdf文件,包括doc目录下子目录的pdf文件
doc/**/*.pdf

查看尚未暂存的文件及其修改

# 工作区文件和索引区文件的对比
git diff

查看将要commit(索引区)的文件和本地仓库文件的区别

git diff --staged
// 等同git diff --cached

提交更新到本地仓库

git commit -m mesg
// 例如:git commit -m "Story 182: Fix benchmarks for speed"

一般提交,需要把文件add到索引区(也即缓存区),然后再提交。跳过使用暂存区域,直接提交到本地仓库

git commit -a mesg
// 例如:git commit -a -m 'added new benchmarks'

移除文件

git rm files
// 等同
rm files
git add files
git commit -m mesg

若文件已修改且提交到缓存区,增加选项-f

git rm -f files

从仓库中删除,不删除工作区文件

git rm --cached files

移动文件

git mv src dest
// 等同
mv src dest
git rm src
git add dest

3.查看修改纪录

查看历史提交记录

git log

查看最近2次提交及差异

$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon
Date: Mon Mar 17 21:52:11 2008 -0700changed the version numberdiff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'spec = Gem::Specification.new do |s|s.platform = Gem::Platform::RUBYs.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"s.author = "Scott Chacon"s.email = "schacon@gee-mail.com"s.summary = "A simple gem for using Git in Ruby code."commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon
Date: Sat Mar 15 16:40:33 2008 -0700removed unnecessary testdiff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGitendend
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
\ No newline at end of file

查看提交并简要显示修改统计

$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon
Date: Mon Mar 17 21:52:11 2008 -0700changed the version numberRakefile | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)

修改纪录格式化输出

// 详细了解$ git log --pretty=的使用,例如
// 单行输出
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit

修改记录按照限定输出

部分选项如下,详细请查看git help log
选项 说明
-(n) 仅显示最近的 n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
--grep 仅显示含指定关键字的提交
-S 仅显示添加或移除了某个关键字的提交

4.撤销操作

若提交漏了文件,可以使用如下命令

git add files
git commit --amend

如此操作,git log显示的提交为同一次

取消暂存文件,在git status显示中也有相应提示

git reset HEAD files

撤销对文件的修改,在git status显示中也有相应提示

git checkout -- files

5.远程仓库的使用

克隆远程仓库

// 用于初始化本地仓库,并与远程仓库有联系
git clone https://github.com/schacon/ticgit

查看远程仓库

// 显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
git remote -v

添加远程仓库

git remote add

例如:

$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)

origin、pb为远程服务器的仓库名

拉取远程仓库和本地仓库的区别部分

$ git fetch [remote-name]

这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。必须注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。 如果你有一个分支设置为跟踪一个远程分支,可以使用 git pull 命令来自动的抓取然后合并远程分支到当前分支

推送到远程仓库

git push [remote-name] [branch-name]

例如,把本地master分支推动到远程origin服务器

$ git push origin master

若远程服务器仓库存在相同分支,后面章节说明解决方案。

查看远程仓库

git remote show [remote-name]

例如查看远程仓库origin信息

$ git remote show origin
* remote originFetch URL: https://github.com/schacon/ticgitPush URL: https://github.com/schacon/ticgitHEAD branch: masterRemote branches:master trackeddev-branch trackedLocal branch configured for 'git pull':master merges with remote masterLocal ref configured for 'git push':master pushes to master (up to date)

远程仓库移除

$ git remote rm paul

重命名远程仓库

$ git remote rename pb paul
$ git remote
origin
paul

值得注意的是这同样也会修改你的远程分支名字。 那些过去引用 pb/master 的现在会引用 paul/master。


6.打标签

像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)。 在本节中,你将会学习如何列出已有的标签、如何创建新标签、以及不同类型的标签分别是什么。

列出标签

$ git tag
v0.1
v1.3

使用特定模式查找标签

$ git tag -l 'v1.8.5*'
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2

创建标签
轻量标签: 一个不会改变的分支 - 它只是一个特定提交的引用。
附注标签: 存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息
建议: 如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。

附注标签
创建标签

// 在运行 tag 命令时指定 -a 选项
// -m 选项指定了一条将会存储在标签中的信息。若未指定,会进入编辑器
$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v0.1
v1.3
v1.4

查看标签信息

$ git show v1.4
tag v1.4
Tagger: Ben Straub
Date: Sat May 3 20:19:12 2014 -0700my version 1.4commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon
Date: Mon Mar 17 21:52:11 2008 -0700changed the version number

轻量标签
创建标签

// 不需要使用-a -m选项
$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw

查看标签方式同附注标签

后期补打标签

git tag [选项] tag commitID
// 例如
$ git tag -a v1.2 9fceb02

共享标签

// 默认情况下,git push 命令并不会传送标签到远程仓库服务器上。
// 在创建完标签后你必须显式地推送标签到共享服务器上。
// 这个过程就像共享远程分支一样 - 你可以运行 git push origin [tagname]
$ git push origin v1.5
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git* [new tag] v1.5 -> v1.5

删除标签

// 使用命令 git tag -d
$ git tag -d v1.4-lw
// 同时更新到远端服务器,必须使用 git push :refs/tags/
$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git- [deleted] v1.4-lw

检出标签

// git checkout tag
$ git checkout 2.0.0

副作用: 检出标签的版本处于“分离头指针”状态,不能做修改,若修改提交,不属于任何分支。若需要修改,需要创建新的分支,例如:

$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

此时version2版本和v2.0.0版本不同。


7.git别名

Git 并不会在你输入部分命令时自动推断出你想要的命令。 如果不想每次都输入完整的 Git 命令,可以通过 git config 文件来轻松地为每一个命令设置一个别名。 例如:

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

例如:

$ git config --global alias.unstage 'reset HEAD --'
// 以下两个命令等同
$ git unstage fileA
$ git reset HEAD -- fileA

查看最新一次的提交

$ git config --global alias.last 'log -1 HEAD'
// 使用如下
$ git last
commit 66938dae3329c7aebe598c2246a8e6af90d04646
Author: Josh Goebel
Date: Tue Aug 26 19:48:51 2008 +0800test for current headSigned-off-by: Scott Chacon

Git 只是简单地将别名替换为对应的命令。 然而,你可能想要执行外部命令,而不是一个 Git 子命令。 如果是那样的话,可以在命令前面加入 ! 符号。 如果你自己要写一些与 Git 仓库协作的工具的话,那会很有用。 我们现在演示将 git visual 定义为 gitk 的别名:

$ git config --global alias.visual '!gitk'

推荐阅读
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • MySQL 数据操作:增、删、查、改全面解析
    MySQL 数据操作:增、删、查、改全面解析 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • 如果你对 IntelliJ IDEA 的界面不太熟悉,可能会对如何在 Android Studio 中执行一些常见任务感到困惑。本文提供了多种开发技巧和实用窍门,帮助开发者更好地利用 Android Studio 的强大功能,包括界面导航、代码调试和项目管理等方面,使开发过程更加高效顺畅。 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • Win7旗舰版无法调节屏幕亮度的原因及解决方法
    Win7旗舰版无法调节屏幕亮度的原因及解决方法 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 在Ubuntu系统中,由于预装了MySQL,因此无需额外安装。通过命令行登录MySQL时,可使用 `mysql -u root -p` 命令,并按提示输入密码。常见问题包括:1. 错误 1045 (28000):访问被拒绝,这通常是由于用户名或密码错误导致。为确保顺利连接,建议检查MySQL服务是否已启动,并确认用户名和密码的正确性。此外,还可以通过配置文件调整权限设置,以增强安全性。 ... [详细]
  • Jedis接口分类详解与应用指南
    本文详细解析了Jedis接口的分类及其应用指南,重点介绍了字符串数据类型(String)的接口功能。作为Redis中最基本的数据存储形式,字符串类型支持多种操作,如设置、获取和更新键值对等,适用于广泛的应用场景。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • 如何提升Python处理约1GB数据集时的运行效率?
    如何提升Python处理约1GB数据集时的运行效率?本文探讨了在后端开发中使用Python处理大规模数据集的优化方法。通过分析常见的性能瓶颈,介绍了多种提高数据处理速度的技术,包括使用高效的数据结构、并行计算、内存管理和代码优化策略。此外,文章还提供了在Ubuntu环境下配置和测试这些优化方案的具体步骤,适用于从事推荐系统等领域的开发者。 ... [详细]
  • 如何在Linux中配置环境变量:命令与脚本详解
    请关注本头条号,每天坚持更新原创干货技术文章。当您在Linux命令行上键入命令时,您实际是在告诉shell运行指定名称的可执行文件。在Linux中,这些可执行程序通常位于系统上的几 ... [详细]
  • 如何在Linux环境中高效地创建、编译与运行C语言代码
    本文面向第一次在linux尝试写C语言程序的新人。有经验的请绕行。C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入 ... [详细]
author-avatar
雷子的世界6888
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有