热门标签 | 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'

推荐阅读
  • 本文详细介绍如何在Android模拟器上安装TaintDroid的过程,包括解决源代码链接失效及服务器文件变动等问题,旨在帮助后续用户避免不必要的麻烦。 ... [详细]
  • 今天我在操作Git时遇到了一个问题,即我的仓库进入了分离的HEAD状态,这与之前讨论过的‘即使本地有更改,git push仍显示所有内容最新’的问题类似。 ... [详细]
  • 本文详细介绍了 SVN 中的 switch 命令及其使用方法,包括如何切换工作副本到新的 URL 和如何处理版本库迁移等情况。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 假设您当前位于主分支(版本C4),但发现某些功能已损坏,而这些功能在之前的版本C1时还能正常工作。如何将从C1到C4的所有提交复制到一个新的特性分支中,同时将主分支回滚至C1,以便能够安全地进行版本控制和持续集成部署? ... [详细]
  • 本文总结了多个常用的 Git 命令,包括分支管理、代码提交、远程仓库同步等,旨在帮助开发者高效利用 Git 进行版本控制。 ... [详细]
  • Git SSH配置及远程仓库操作指南
    本文介绍了如何配置Git环境,包括设置用户信息、生成和添加SSH密钥,并详细说明了如何通过SSH连接到远程仓库进行版本控制操作。 ... [详细]
  • 本文详细解析了在使用Git进行代码推送时常见的两个错误——'fetch first'和'non-fast-forward',并提供了有效的解决方案。通过理解这些错误背后的原因,开发者可以更加高效地管理代码版本。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • 本文总结了在多人协作开发环境中使用 Git 时常见的问题及其解决方案,包括错误合并分支的处理、使用 SourceTree 查找问题提交、Git 自动生成的提交信息解释、删除远程仓库文件夹而不删除本地文件的方法、合并冲突时的注意事项以及如何将多个提交合并为一个。 ... [详细]
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社区 版权所有