git操作笔记

首先本文参考廖雪峰的git学习教程,写的非常好,值得学习。

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

一、git源码包安装:

因yum安装的版本太低,故下载最新版本git-2.7.0.tar.gz和git-manpages-2.7.0.tar.gz,下载URL:

https://www.kernel.org/pub/software/scm/git/

建议下载git-manpages-2.7.0.tar.gz,并解压后的man放置到系统的/usr/share/man目录下,或者修改/etc/man.config配置文件,添加MANPATH路径指向你的解压目录即可使用man查看git的具体详细帮助。

二、git使用介绍: 

1、设置当前Git仓库的身份认证

git config --global user.email "[email protected]"
git config --global user.name "David"

 2、git添加文件或目录:  git add -u [<path>]: 把<path>中所有tracked文件中被修改过或已删除文件的信息添加到索引库。它不会处理untracted的文件。 省略<path>表示.,即当前目录。   git add -A: [<path>]表示把<path>中所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到索引库。 省略<path>表示.,即当前目录。

 3、git查看日志及版本回退:   git log --pretty=oneline    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上此参数

  日志中有commit_id号,即HEAD版本。
  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。


  4、git工作区和暂存区:       工作区(Working Directory):就是你在电脑里能看到的目录

    版本库(Repository)

    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEADgit add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

  5、git diff比较:      主要是对工作区、暂存区和git分支的理解:

git diff:是查看working tree与index file的差别的。

git diff --cached:是查看index file与commit的差别的。

git diff HEAD:是查看working tree和commit的差别的。

      (1). git diff:
      默认是对比工作区和暂存区,举例说明:
初始状态:
[[email protected]_168_174_62 git]# cat readme
nihao
welcome

修改readme:
[[email protected]_168_174_62 git]# cat readme
nihao
welcome
1
2
3

在没add之前,暂存区没内容,个人理解是获取了分支里的内容:
[[email protected]_168_174_62 git]# git diff readme
diff --git a/readme b/readme
index 07ee8c0..d603750 100644
--- a/readme
+++ b/readme
@@ -1,2 +1,5 @@
 nihao
 welcome
+1
+2
+3

在add之后,暂存区和工作区的比较:
[[email protected]_168_174_62 git]# git add -u
You have mail in /var/spool/mail/root
[[email protected]_168_174_62 git]# git diff readme
[[email protected]_168_174_62 git]# 
      (2).git diff [--options] <commit> [--] [<path>...]

将工作区跟指定的版本进行比较:

[[email protected]_168_174_62 git]# git diff 57ad1dc readme
diff --git a/readme b/readme
index 07ee8c0..d603750 100644
--- a/readme
+++ b/readme
@@ -1,2 +1,5 @@
 nihao
 welcome
+1
+2
+3

[[email protected]_168_174_62 git]# git diff 66ad45b readme
diff --git a/readme b/readme
index c83ca87..d603750 100644
--- a/readme
+++ b/readme
@@ -1,5 +1,5 @@
 nihao
 welcome
-a
-b
-c
+1
+2
+3
      (3). git diff --cached :

git diff [--options] --cached [<commit>] [--] [<path>...]
This form is to view the changes you staged for the next commit relative to the named <commit>. Typically
you would want comparison with the latest commit, so if you do not give <commit>, it defaults to HEAD. If
HEAD does not exist (e.g. unborn branches) and <commit> is not given, it shows all staged changes. --staged
is a synonym of --cached.

个人理解:是暂存区跟指定版本的分支内容进行比较。举例说明:

初始状态:
[[email protected]_168_174_62 git]# cat readme
nihao
welcome

修改后:
[[email protected]_168_174_62 git]# cat readme
nihao
welcome
1
2
3

使用--cached进行比较:

在add之前无差异:
[[email protected]_168_174_62 git]# git diff --cached readme
[[email protected]_168_174_62 git]#
暂存区跟分支中是一样。

在add之后有差异:
[[email protected]_168_174_62 git]# git add readme
You have mail in /var/spool/mail/root
[[email protected]_168_174_62 git]# git diff --cached readme
diff --git a/readme b/readme
index 07ee8c0..d603750 100644
--- a/readme
+++ b/readme
@@ -1,2 +1,5 @@
 nihao
 welcome
+1
+2
+3
暂存区跟当前分支中是不一样的。

跟其他分支版本进行比较:
[[email protected]_168_174_62 git]# git diff --cached 66ad45b readme
diff --git a/readme b/readme
index c83ca87..d603750 100644
--- a/readme
+++ b/readme
@@ -1,5 +1,5 @@
 nihao
 welcome
-a
-b
-c
+1
+2
+3
[[email protected]_168_174_62 git]# 

 6、git checkout -- file可以丢弃工作区的修改,即撤销修改:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。或者直接使用git reset --hard HEAD

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。

(1).撤销工作区的修改符合就近原则:

工作区 < - 缓冲区 <- 版本库

  • 撤销工作区修改,如果缓冲区有该文件,则checkout -- file 会将缓冲区的内容覆盖到工作区,此时工作区和缓冲区文件内容相同,因此工作区是干净的,并没有未add的文件。
  • 撤销工作区修改,如果缓冲区没有该文件,则checkout -- file命令会继续向上找,找到版本库中的该文件,此时使用版本库中的文件覆盖工作区,工作区干净

(2).撤销缓冲区

  • 撤销缓冲区,使用git rest HEAD -- file ,则会将直接丢弃缓冲区中的相应内容,只剩下工作区的版本。缓冲区中内容并没有覆盖到工作区,而是直接清除。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

  注:git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

三、远程仓库GitHub:由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密1、创建SSH Key:      在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
          $ ssh-keygen -t rsa -C "[email protected]"

2、登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

3、创建github上的仓库,并与本地进行同步:

要关联一个远程库,使用命令git remote add origin [email protected]:path/repo-name.git

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!


git remote add origin https://github.com/wushank/python.git

[[email protected]_168_174_62 python]# git push -u origin master

(gnome-ssh-askpass:23186): Gtk-WARNING **: cannot open display:
error: unable to read askpass response from ‘/usr/libexec/openssh/gnome-ssh-askpass‘
Username for ‘https://github.com‘: wushank

(gnome-ssh-askpass:23201): Gtk-WARNING **: cannot open display:
error: unable to read askpass response from ‘/usr/libexec/openssh/gnome-ssh-askpass‘
Password for ‘https://[email protected]‘:
Counting objects: 28, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (28/28), 879.65 KiB | 0 bytes/s, done.
Total 28 (delta 4), reused 0 (delta 0)
To https://github.com/wushank/python.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
时间: 2024-10-25 01:58:58

git操作笔记的相关文章

Git 学习笔记

Git 学习笔记 本文整理参考廖雪峰的 Git 教程, 整理 Git 学习笔记, 用于 Git 常用命令速查:常用命令用彩色标注! Git学习笔记 $ git config --global user.name "Your Name" 配置本机所有仓库的用户名 $ git config --global user.email "[email protected]" 配置本机所有仓库的Email地址 $ git init 初始化一个Git仓库 $ ls -ah 查看隐

版本控制——Git 使用笔记,以及Windows搭建Git服务器

Git和Github的关系 链接:http://www.zhihu.com/question/21907548/answer/95284202 来源:知乎 Git是一款免费.开源的分布式版本控制系统 Github是用Git做版本控制的代码托管平台 相当于本地.公司服务器.Github网站服务器都装Git做版本控制,只不过Github的服务器强大些,对全球用户托管的项目用Git做版本控制! 正是由于Github用Git做版本控制,所以可以轻松的记录项目的变迁史,然后有了下图 git是一张弓,git

【Git 使用笔记】第二部分:基本命令 和 单分支开发

git 基本命令 git add . git commit -am "请填写你NB的备注" git fetch --all git push origin master:master git remote add origin 仓库地址 git remote rm origin git remote -v git rebase origin/master git rebase --continue git rebase --skip git rebase --abort ###举例仓库

Git 使用笔记

这是我在Coursera上的学习笔记.课程名称为<Computer Networks>,出自University of Washington. 由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了.这门课程在2013年左右录制,知识相对还是比较新的.覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细.学完这门课程之后对计算机网络会有比较深刻的了解. 本章讲述了这门课程的大致情况,讲述了协议.协议层等基本概念. 目标和动机 课程的主要目标就是介绍计算

Git教程笔记

1Git基础说明 1.1Git与subversion的区别 Git只关注文件数据的整体内容是否发生改变,而不关心文件内容的具体差异 Git是分布式的版本控制系统,因此大多数的操作不需要网络环境 所有保存在Git数据库中的东西都是通过对内容的SHA-1计算的hash值作为索引而不是靠文件名 当把本地工作推送到服务器上时,Git必须服务器上的更新合并到本地后才能推送,而Subversion会在服务器端自动合并提交的更新 1.2Git文件状态变化表 对于任何文件,在Git内部只有三种状态:已提交(表示

《Pro Git》笔记3:分支基本操作

<Pro Git>笔记3:Git分支基本操作 分支使多线开发和合并非常容易.Git的分支就是一个指向提交对象的可变指针,极其轻量.Git的默认分支为master. 1.Git数据存储结构和分支 git提交时会将暂存文件的内容,暂存的目录结构,提交对象,含附注标签对象都以包含信息头的二进制文件形式存储到版本库中(.git/objects目录),存储的对象以其自身SHA1值作为唯一标识,SHA1前两位为存储对象所在目录名,SHA1后38位为存储对象的文件名.存储的数据对象类型有: blob(文件内

【版本控制】git学习笔记(二)

关于git的基本使用请阅读上篇博文内容,[版本控制]git学习笔记(一). 1.远程仓库 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以"克隆"这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分. 你肯定会想,至少需要两台机器才能玩远程库不是?但是我只有一台电脑,怎么玩? 其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下.不过,现实生活中是不会有人这么傻的在一台电脑

Git学习笔记(四)

一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了.所有配置文件可以直接在线浏览:https://github.com/github/gitignore .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理! 二.配置别名 $ git config --global al

Git学习笔记(8)——标签管理

本文主要记录的Git标签的作用.标签的多种创建方式,以及标签的删除,与推送,和使用GitHub的Fork参与别人的项目. 标签的作用 发布版本时,通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照.Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像,但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的. 创建标签 [email pro