git常用命令

来源:互联网 发布:pc客户端界面设计软件 编辑:程序博客网 时间:2024/06/05 16:00
1、创建目录:/a/b/c
[root@centos demo]# mkdir -p a/b/c

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

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

4、相对于工作区根目录的相对目录:
[root@centos c]# git rev-parse --show-prefix
a/b/c/

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

6、
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文件) 
全局配置文件进行编辑

[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 --system

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

7、
设置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.com

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

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

9、
备份:
[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


10、
查看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

11、
不带任何选项和参数调用“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.

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

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

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


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

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

查看一下状态:git status

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

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

17、
移动文件: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两条命令取代

18、
忽略文件: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 不被 
忽略。

19、
查看日志: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

21、多步悔棋
以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(-)



22、时间旅行一
(1)首先查看最新6条提交
[root@centos demo]# git log --oneline --decorate -6
6d2fd9c 提交文件06
ff67aac 提交文件05
022d64d 提交文件04
38f0dd5 一次提交文件02、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) 一次提交文件02、03
ade3bc1 (B) 提交文件01
ce72740 (A) 改名测试

好戏现在开始:
一、现在演出第一幕:干掉坏蛋D
1、执行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... 一次提交文件02、03


2、执行拣选操作将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
3、通过日志可以看出坏蛋D已经不存在了:git log --oneline --decorate -6
[root@centos demo]# git log --oneline --decorate -6
5ac7400 (HEAD) 测试2
f3b85ad modify hello.h
38f0dd5 (C) 一次提交文件02、03
ade3bc1 (B) 提交文件01
ce72740 (A) 改名测试
ded662f which version checked in?


4、通过日志还可以看出来,最新两次提交的原始创作日期(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

一次提交文件02、03

5、最重要的一步操作,就是要将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


二、
(3)
(4)


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


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


25、分支
查看本地分支: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


26、修改好代码之后提交到远程版本库步骤:
(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


27、创建新的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>


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


29、提交本地开发的代码:
$git status //查看当前工作目录的情况,git会列出三部分内容:1 已经放至暂存区的内


容;2 做了修改还未放至暂存区的内容; 3 未跟踪的文件


$git add * //将所有本地修改放至暂存区


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


$git commit //运行这个命令之后,会提示输入本次提交的说明,填写后保存,git就


将暂存区中的内容提交至本地版本库中了。此时运行命令:git log 就可以看到本次的提


交了。


注:在commit之前,要确保版本库中已经下载了commit-msg钩子,这个钩子会在每次提交


的时候自动为提示说明中加一个Change-Id:xxxxxxxxxxxxxxxx,XX是生成的唯一字符串。
提交说明的格式:第一行为本次提交的概要说明,空一行,第三行开始写本次提


交的详细说明,若无详细说明,在第三行标记一个“-”


0 0
原创粉丝点击