Linux命令:git

Lasted 2020-01-01 20:55:49

git是一个分布式版本控制软件,最初为更好管理Linux内核开发而设计。与CVS、Subversion等一类集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。

git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。

GIT GUI客户端

安装Git

1. 在Linux上安装Git,并查看版本信息。

CentOS
yum install git
Debian
apt-get install git
git version
git version 1.8.3.1

常用命令

2. 使用git前你需要先配置用户名和email地址,git提交的时候需要使用。

配置用户名和邮箱
git config --global user.name "username"
git config --global user.email "mail@example.com"
显示当前配置信息
git config --list
user.name=username
user.email=mail@example.com

3. 设置和取消密码。

git config --global user.password "password"
git config --global --unset user.password

4. 初始化本地仓库。

git init docsxyz
Initialized empty Git repository in /home/git/docsxyz/.git/

仓库创建成功后会生成.git目录,该目录为隐藏目录,需通过 ls -al查看。目录结构如下所示:

  • branches:存放分支信息。
  • config:存放各种设置文档。
  • HEAD:指向当前所在分支的指针文件路径,一般指向refs下的某文件。
  • hooks:存储钩子的文件夹。
  • objects:存放git对象。
  • refs:存储指向各个分支的指针(SHA-1标识)文件。

5. 克隆现有的仓库。

git clone https://github.com/ranxk/ranxkshell.git
Cloning into 'ranxkshell'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 21 (delta 0), reused 0 (delta 0), pack-reused 15
Unpacking objects: 100% (21/21), done.

6. 查看本地仓库修改状态。

git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#	README.md
nothing added to commit but untracked files present (use "git add" to track)

以上命令表示添加了README.md文件,需要执行git add ...命令添加文件。

7. 添加文件或目录。

git add .

8. 提交本地修改,添加备注信息。

git commit -am '添加README'
[master (root-commit) 0a03487] 添加README
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
查看本地仓库状态
git status
# On branch master
nothing to commit, working directory clean

9. 推送本地到服务器。

git push
Counting objects: 11, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 716 bytes, done.
Total 7 (delta 2), reused 4 (delta 1)
To git@github.com:schacon/simplegit-progit.git
  a11bef0..ca82a6d  master -> master

10. 查看提交日志。

git log
commit 0a034875a611144b93c80ed851c00cc2b6768c64
Author: username 
Date:   Wed Jan 1 19:37:13 2020 +0800

    添加README
只显示一行输出简化信息,短Hash值和备注信息
git log --oneline
0a03487 添加README
显示最近5次提交记录
git log -5

git log可以添加参数对输出格式进行控制,如下所示:

  • --oneline 显示简化信息。
  • --name-only 显示提交文件。
  • --stat 输出文件增删改的统计数据。
  • -p 输出每个commit具体修改的内容,输出的形式以diff的形式给出。
  • --pretty 自定义输出的信息。
  • --author 限定输出给定的用户。
  • -n n表示你要输出的提交记录。
  • --after 限定输出的开始时间,如:'10-1-2019'。
  • --before 限定输出的结束时间,如:'10-1-2019'。

11. 格式化输出日志信息。

git log --pretty=format:"%h %s"
0a03487 添加README

以上命令作用类似,git log --oneline,format支持的参数如下:

  • %H 提交对象(commit)的完整哈希字串。
  • %h 提交对象的简短哈希字串。
  • %T 树对象(tree)的完整哈希字串。
  • %t 树对象的简短哈希字串。
  • %P 父对象(parent)的完整哈希字串。
  • %p 父对象的简短哈希字串。
  • %an 作者(author)的名字。
  • %ae 作者的电子邮件地址。
  • %ad 作者修订日期(可以用-date= 选项定制格式)。
  • %ar 作者修订日期,按多久以前的方式显示。
  • %cn 提交者(committer)的名字。
  • %ce 提交者的电子邮件地址。
  • %cd 提交日期。
  • %cr 提交日期,按多久以前的方式显示。
  • %s 提交说明。

 

常见问题

fatal: could not read Username for 'https://github.com/': terminal prompts disabled

如果用户配置过ssh,可通过替换git@进行访问

如果git@github路径没问题,可以全局替换URL
git config --global --add url."git@github.com:".insteadOf "https://github.com/"