Git学习笔记

一、建立目录:/a/b/c
[root@centos demo]# mkdir -p a/b/cphp

二、显示版本库.git目录所在的位置
[root@centos c]# git rev-parse --git-dir
/path/to/my/workspace/demo/.gitgit

三、显示工做区根目录:
[root@centos c]# git rev-parse --show-toplevel
/path/to/my/workspace/democentos

四、相对于工做区根目录的相对目录:
[root@centos c]# git rev-parse --show-prefix
a/b/c/服务器

五、显示从当前目录(cd)后退(up)到工做区的根的深度
[root@centos c]# git rev-parse --show-cdup
../../../app

六、
git config命令的各参数的区别:
执行下面的命令,将打开/path/to/my/workspace/demo/.git/config文件进行编辑。
[root@centos /]# cd /path/to/my/workspace/demo/
[root@centos demo]# git config -e
执行下面的命令,将打开/home/leedaning/.gitconfig(用户主目录下的.gitconfig文件)全局配置文件进行编辑less

[root@centos etc]# git config -e --global
[user]
email = leedaning@163.com
name = leedaning
emial = dolialove@qq.com
[i18n]
commitencoding = utf-8
[color]
diff = auto
status = auto
branch = auto
interactive = auto
ui = auto
[core]
autocrlf = false
~
执行下面的命令,将打开/etc/gitconfig系统级配置文件进行编辑。若是Git安装在非标准位置,则这个系统级的配置文件也多是在另外的位置。
[root@centos ~]# git config -e --systemssh

Git的三个配置文件分别是版本库级别的配置文件、全局配置文件(用户主目录下)和系统级配置文件(/etc目录下)。其中版本库级别的配置文件的优先级最高,全局配置文件次之,系统级配置文件优先级最低。这样的优先级设置可让版本库.git目录下的config文件中的配置覆盖用户主目录下的Git环境配置,而用户主目录下的配置也能够覆盖系统的Git配置文件。ide

七、
设置Git全局配置文件中关于user.name和user.email的设置:
[root@centos ~]# git config --global user.name 'leedaning'
[root@centos ~]# git config --global user.email 'leedaning@163.com'测试

查看Git全局配置文件中的user.name和user.email:
[root@centos ~]# git config user.name
leedaning
[root@centos ~]# git config user.email
leedaning@163.comfetch

删除Git全局配置文件中关于user.name和user.email的设置:
[root@centos ~]# git config --unset --global user.name
[root@centos ~]# git config --unset --global user.email

八、
别名设置命令:
[root@centos ~]# git config --global alias.ci "commit -s"

九、
备份:
[root@centos /]# cd path/to/my/workspace/
[root@centos workspace]# ls
demo
[root@centos workspace]# git clone demo demo-step-1 //备份demo为demo-step-1
Initialized empty Git repository in /path/to/my/workspace/demo-step-1/.git/
warning: You appear to have cloned an empty repository.
[root@centos workspace]# ls
demo demo-step-1


十、
查看git提交日志:
[root@centos workspace]# git log --stat
(--stat参数能够看到每次提交的文件变动统计。)

(先执行这个:git add welcome.txt)
修改文件:[root@centos demo]# echo "Nice to meet you." >> welcome.txt
使用"git diff"查看修改后的文件与版本库中的文件的差别:
[root@centos demo]# git diff
diff --git a/welcome.txt b/welcome.txt
index 18832d3..fd3c069 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,2 @@
Hello.
+Nice to meet you.

执行git status -s 查看文件状态。
[root@centos demo]# git status -s
M welcome.txt

十一、
不带任何选项和参数调用“git diff”显示工做区的最新改动,即工做区与提交任务(提交暂存区,stage)中相比的差别:
[root@centos demo]# git diff
diff --git a/welcome.txt b/welcome.txt
index 51dbfd2..69a4c8e 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1,3 +1,4 @@
Hello.
Nice to meet you.
Bye-Bye.
+Ha ha ha.

将工做区和HEAD(当前工做分支)相比,会看到更多的差别:
[root@centos demo]# git diff HEAD
diff --git a/welcome.txt b/welcome.txt
index 18832d3..69a4c8e 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,4 @@
Hello.
+Nice to meet you.
+Bye-Bye.
+Ha ha ha.

经过参数--cached或--staged调用git diff 命令,看到的是提交暂存区(提交任务,stage)和版本库中文件的差别:
[root@centos demo]# git diff --cached
diff --git a/welcome.txt b/welcome.txt
index 18832d3..51dbfd2 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,3 @@
Hello.
+Nice to meet you.
+Bye-Bye.

而后执行git commit命令提交:
[root@centos demo]# git log --pretty=oneline
c5ae545bd88531837d172cd5b470e91e659d85ab Append a nice line.
[root@centos demo]# git commit -m "which version checked in?" //提交
[master ded662f] which version checked in?
1 files changed, 2 insertions(+), 0 deletions(-)
[root@centos demo]# git log --pretty=oneline
ded662fad2a621d4d78200e81b429cafb8e513e5 which version checked in?
c5ae545bd88531837d172cd5b470e91e659d85ab Append a nice line.

十二、
git clean -fd
清除当前工做区中没有加入版本库的文件和目录(非跟踪文件和目录)

git checkout .
用暂存区内容刷新工做区,重写工做区

1三、
保存当前的工做进度:git stash
查看保存的进度列表命令:git stash list
从最近保存的进度进行恢复:git stash pop
删除一个存储的进度(默认删除最新的进度):git stash drop
删除全部存储的进度:git stash clear


1四、
查看暂存区(版本库)中的文件:git ls-files

1五、
删除文件:git rm
如:git rm detached-commit.txt hack-1.txt welcome.txt

查看一下状态:git status

删除动做加入了暂存区,这时执行提交动做就真正意义上执行了文件的删除:git commit -m "delete trash files. (using:git rm)"

1六、
快速标记删除:git add -u

1七、
移动文件:git mv
[root@centos demo]# git mv welcome.txt README
[root@centos demo]# git commit -m "新的测试"
[master d196ac5] 新的测试
1 files changed, 0 insertions(+), 0 deletions(-)
rename welcome.txt => README (100%)

更名操做至关于对旧文件执行删除,对新文件执行添加。实际上彻底能够不使用git mv命令,而是以git rm和git add两条命令取代

1八、
忽略文件:cat > .gitignore << EOF

git忽略语法:
忽略文件中的空行或以井号(#)开始的行会被忽略。
可使用通配符,参见Linux手册:glob(7)。例如:星号(*)表明任意多字符,问好(?)表明一个字符,方括号(【abc】)表明可选字符范围等。
若是名称的最前面是一个路径分隔符(/),代表要忽略的文件在此目录下,而非子目录的文件。
若是名称的最后面是一个路径分隔符(/),代表要忽略的是整个目录,同名文件不忽略,不然同名的文件和目录都忽略。
经过在名称的最前面添加一个感叹号(!)表明不忽略。

# 这是注释行 -- 被忽略
*.a # 忽略全部以.a为扩展名的文件。
!lib.a # 可是 lib.a 文件或目录不要忽略,即便前面设置了对 *.a 的忽略。
/TODO # 只忽略此目录下的TODO文件,子目录的TODO文件不忽略。
build/ # 忽略全部 build/ 目录下的文件。
doc/*.txt # 忽略文件如 doc/notes.txt,可是文件如 doc/server/arch.txt 不被忽略。

1九、
查看日志:git log
显示最近的几条日志:git log -3 --pretty=oneline

查看最近的六条提交:
git log --oneline -6

git log --stat --pretty=oneline -6


20、悔棋
查看当前版本库最新的两次提交:git log --stat -2
[root@centos demo]# git log --stat -2
commit 5de2d8d7540531dca40d69d92a09d498a5ce1edb
Author: leedaning <leedaning@163.com>
Date: Thu Jan 29 14:30:24 2015 +0800

Test commit src.php src/main.c file. author lee

README | 1 +
src.php | 4 ++++
src/main.c | 11 +++++++++++
3 files changed, 16 insertions(+), 0 deletions(-)

commit d196ac52dcad77f7e3139e5f133865a5b9bddc8d
Author: leedaning <leedaning@163.com>
Date: Thu Jan 29 11:46:53 2015 +0800

新的测试

README | 3 +++
welcome.txt | 3 ---
2 files changed, 3 insertions(+), 3 deletions(-)


更改提交的提交说明:git commit --amend -m "Remove hello.h, which is useless."
[root@centos demo]# git commit --amend -m "Remove hello.h, which is useless."
[master e90a31c] Remove hello.h, which is useless.
3 files changed, 16 insertions(+), 0 deletions(-)
create mode 100644 src.php
create mode 100644 src/main.c

2一、多步悔棋
以demo版本库为例,看看版本库最近三次提交。
[root@centos demo]# git log --stat --pretty=oneline -3
5de2d8d7540531dca40d69d92a09d498a5ce1edb Test commit src.php src/main.c file. a
README | 1 +
src.php | 4 ++++
src/main.c | 11 +++++++++++
3 files changed, 16 insertions(+), 0 deletions(-)
d196ac52dcad77f7e3139e5f133865a5b9bddc8d 新的测试
README | 3 +++
welcome.txt | 3 ---
2 files changed, 3 insertions(+), 3 deletions(-)
7de05439c5a3590eac746dd71b0a4aa47be0bab7 测试2
README | 3
welcome.txt | 3 +++
2 files changed, 3 insertions(+), 3 deletions(-)
(END)

把最近的两个提交压缩为一个,并把提交说明改成“modify hello.h”,可使用以下方法进行操做:
(1)使用--soft参数调用重置命令,回到最近两次提交以前(也就是倒数第三次的时候)
命令:git reset --soft HEAD^^

(2)查看版本状态和最新日志:git status
[root@centos demo]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: welcome.txt -> README
# new file: src.php
# new file: src/main.c
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# src/Makefile
# src/version.h.in
[root@centos demo]# git log -1
commit 7de05439c5a3590eac746dd71b0a4aa47be0bab7
Author: leedaning <leedaning@163.com>
Date: Thu Jan 29 11:45:59 2015 +0800

测试2

(3)执行提交操做,即完成最新两个提交压缩为一个提交的操做:git commit -m "modify hello.h"
[root@centos demo]# git commit -m "modify hello.h"
[master 960e11b] modify hello.h
3 files changed, 16 insertions(+), 0 deletions(-)
rename welcome.txt => README (77%)
create mode 100644 src.php
create mode 100644 src/main.c

(4)查看提交日志,“多步悔棋”操做成功
[root@centos demo]# git log --stat --pretty=oneline -2
960e11b727672dfdb5aed64971098bcc0662e41c modify hello.h
README | 4 ++++
src.php | 4 ++++
src/main.c | 11 +++++++++++
welcome.txt | 3 ---
4 files changed, 19 insertions(+), 3 deletions(-)
7de05439c5a3590eac746dd71b0a4aa47be0bab7 测试2
README | 3 ---
welcome.txt | 3 +++
2 files changed, 3 insertions(+), 3 deletions(-)

 

2二、时间旅行一
(1)首先查看最新6条提交
[root@centos demo]# git log --oneline --decorate -6
6d2fd9c 提交文件06
ff67aac 提交文件05
022d64d 提交文件04
38f0dd5 一次提交文件0二、03
ade3bc1 提交文件01
ce72740 更名测试

(2)对版本库要用到的提交记录进行标记,使用命令git tag(无非就是在特定命名空间创建“固定”的引用,用于对提交进行标识):
[root@centos demo]# git tag F
[root@centos demo]# git tag E HEAD^
[root@centos demo]# git tag D HEAD^^
[root@centos demo]# git tag C HEAD^^^
[root@centos demo]# git tag B HEAD~4
[root@centos demo]# git tag A HEAD~5

 

经过日志,查看被标记的5个提交:
[root@centos demo]# git log --oneline --decorate -6
6d2fd9c (HEAD, F) 提交文件06
ff67aac (E) 提交文件05
022d64d (D) 提交文件04
38f0dd5 (C) 一次提交文件0二、03
ade3bc1 (B) 提交文件01
ce72740 (A) 更名测试

好戏如今开始:
1、如今演出第一幕:干掉坏蛋D
一、执行git checkout命令,暂时将HEAD头指正切换到C,切换过程显示处于非跟踪状态的警告,木有关系,剧情须要。
[root@centos demo]# git checkout C
Note: checking out 'C'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

HEAD is now at ce72740... 更名测试

无误的结果为:
[root@centos demo]# git checkout C
Previous HEAD position was 6d2fd9c... 提交文件06
HEAD is now at 38f0dd5... 一次提交文件0二、03


二、执行拣选操做将E提交放在当前HEAD上重放。
由于E和master^显然指向同一个角色,所以能够用下面的语法。
[root@centos demo]# git cherry-pick master
Finished one cherry-pick.
[detached HEAD f3b85ad] modify hello.h
3 files changed, 16 insertions(+), 0 deletions(-)
create mode 100644 src.php
create mode 100644 src/main.c
[root@centos demo]# git cherry-pick master^
Finished one cherry-pick.
[detached HEAD 5ac7400] 测试2
1 files changed, 0 insertions(+), 0 deletions(-)
rename README => welcome.txt (100%)


若是还有F则:
E:git cherry-pick master^
F:git cherry-pick master
三、经过日志能够看出坏蛋D已经不存在了:git log --oneline --decorate -6
[root@centos demo]# git log --oneline --decorate -6
5ac7400 (HEAD) 测试2
f3b85ad modify hello.h
38f0dd5 (C) 一次提交文件0二、03
ade3bc1 (B) 提交文件01
ce72740 (A) 更名测试
ded662f which version checked in?


四、经过日志还能够看出来,最新两次提交的原始创做日期(AuthorDate)和提交日期(CommitDate)不一样。AuthorDate是拣选提交的原始更改时间,而CommitDate是拣选操做时的时间,所以拣选后的新提交的SHA1哈希值也不一样于所拣选的原提交的SHA1哈希值。第三次的原始创做日期(AuthorDate)和提交日期(CommitDate)是一致的。
[root@centos demo]# git log --pretty=fuller --decorate -3
commit 5ac74000d5f42f9a5c7e9897edd59c4271ba899c (HEAD)
Author: leedaning <leedaning@163.com>
AuthorDate: Thu Jan 29 11:45:59 2015 +0800
Commit: leedaning <leedaning@163.com>
CommitDate: Fri Jan 30 10:48:40 2015 +0800

测试2

commit f3b85adfde481174443740cbe81460417c2872ab
Author: leedaning <leedaning@163.com>
AuthorDate: Thu Jan 29 16:58:44 2015 +0800
Commit: leedaning <leedaning@163.com>
CommitDate: Fri Jan 30 10:47:57 2015 +0800

modify hello.h

commit 38f0dd50880a8c1f202edf0416f3331d2f77f293 (C)
Author: leedaning <leedaning@163.com>
AuthorDate: Fri Jan 30 10:24:39 2015 +0800
Commit: leedaning <leedaning@163.com>
CommitDate: Fri Jan 30 10:24:39 2015 +0800

一次提交文件0二、03

五、最重要的一步操做,就是要将master分支重置到新的提交ID(960e11b)上。
下面的切换操做使用了reflog的语法,即HEAD@{1}至关于切换回master分支前的HEAD指向,即960e11b。
[root@centos demo]# git checkout master
Previous HEAD position was 5ac7400... 测试2
Switched to branch 'master'
[root@centos demo]# git reset --hard HEAD@{1}
HEAD is now at 5ac7400 测试2


2、
(3)
(4)


2三、
反转提交:git revert
查看反向提交以后的结果:git log --stat -2


2四、
git版本库克隆:git clone
实现克隆之间的同步:git push和git pull


2五、分支
查看本地分支:git branch
查看本地版本库中全部分支:git branch -al
查看远程分支:git branch -a
建立分支develop:git branch develop
把分支develop推送到远程分支:git push origin develop
切换到分支develop:git checkout develop
删除本地分支develop:git branch -d develop


2六、修改好代码以后提交到远程版本库步骤:
(1)从本地工做目录提交到本地版本库:git commit
(2)从本地版本库推送到远程版本库:git push origin HEAD:refs/for/develop
获取钩子(每次git init以后都要一次): scp -p -P 8849 lining@114.215.120.180:hooks/commit-msg .git/hooks/

若是提交到本地版本库以后发现还须要修改:

回退到上次提交:git reset --soft HEAD~1
查看当前须要提交的修改:git status
从本地工做目录提交到本地版本库:git commit
推送到远程版本库:git push origin HEAD:refs/for/develop


2七、建立新的SSH key

ssh-keygen -t rsa -C "your_email@youremail.com"
Creates a new ssh key using the provided email Generating public/private rsa key pair.
#此处输入将要保存的路径,默认为当前路径
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):<press enter>
输入回车后提示输入一个相似于密码的自定义的通行证号,若是直接回车则为空
Enter passphrase (empty for no passphrase):<enter a passphrase>
#提示从新输入以便确认输入是否正确
Enter same passphrase again:<enter passphrase again>


2八、获取服务器上最新的内容:$git fetch


2九、提交本地开发的代码:
$git status //查看当前工做目录的状况,git会列出三部份内容:1 已经放至暂存区的内
容;2 作了修改还未放至暂存区的内容; 3 未跟踪的文件

$git add * //将全部本地修改放至暂存区

$git status //查看当前工做目录的状况以确认暂存区的内容

$git commit //运行这个命令以后,会提示输入本次提交的说明,填写后保存,git就
将暂存区中的内容提交至本地版本库中了。此时运行命令:git log 就能够看到本次的提
交了。

注:在commit以前,要确保版本库中已经下载了commit-msg钩子,这个钩子会在每次提交 的时候自动为提示说明中加一个Change-Id:xxxxxxxxxxxxxxxx,XX是生成的惟一字符串。提交说明的格式:第一行为本次提交的概要说明,空一行,第三行开始写本次提 交的详细说明,若无详细说明,在第三行标记一个“-”

相关文章
相关标签/搜索