Git基本用法(上)

一、git的初始化

1.Git 配置

使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名。

$ git config --global user.name "Scott Chacon"
$ git config --global user.email "[email protected]"

执行了上面的命令后,会在家目录(/home)下建立一个叫.gitconfig 的文件(该文件问隐藏文件,需要使用ls -al查看到). 内容一般像下面这样,可以使用vim或cat查看文件内容:

$ cat ~/.gitconfig
[user]
        name = Scott Chacon
        email = schacon@gmail.com

如果你想使项目里的某个值与前面的全局设置有区别(例如把私人邮箱地址改为工作邮箱);你可以在项目中使用git config 命令不带 --global 选项来设置. 这会在你项目目录下的 .git/config 文件增加一节[user]内容(如上所示)。对于新建项目,这部分定制操作需要在git初始化之后才可以执行.

二、获得一个Git仓库

既然我们现在把一切都设置好了,那么我们需要一个Git仓库。有两种方法可以得到它:一种是从已有的Git仓库中clone (克隆,复制);还有一种是新建一个仓库,把未进行版本控制的文件进行版本控制。

1.Clone一个仓库

为了得一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s)://, git://,或是只是以一个用户名(git 会认为这是一个ssh 地址)为前辍. 有些仓库可以通过不只一种协议来访问,例如,Git本身的源代码你既可以用 git:// 协议来访问:

$ git clone http://git.shiyanlou.com/shiyanlou/gitproject

也可以通过http 协议来访问:

$ git clone http://github.com/shiyanlou/gitproject.git

当前git project仅是测试项目,里面仅有一个README.md文件

2.初始化一个新的仓库

可以对一个已存在的文件夹用下面的命令让它置于Git的版本控制管理之下. 创建文件夹

$ mkdir project

添加文件及文件内容

$ echo "test content" > project/testfile.txt

Git仓库初始化

$ cd project
$ git init

Git会输出:

Initialized empty Git repository in /home/shiyanlou/project/.git/

通过la命令会发现project目录下会有一个名叫”.git” 的目录被创建,这意味着一个仓库被初始化了。

三、正常的工作流程

1.正常的工作流程

进入我们刚才建立的project目录,创建文件file1,file2,file3

$ cd project
$ touch file1 file2 file3

修改文件,可以使用vim编辑内容,也可以直接echo添加测试内容。将它们更新的内容添加到索引中.

$ echo "testcontent1" >> file1
$ echo "testcontent2" >> file2
$ echo "testcontent3" >> file3
$ git add file1 file2 file3

你现在为commit做好了准备,你可以使用 git diff 命令再加上 --cached 参数 ,看看哪些文件将被提交(commit)。

$ git diff --cached

(如果没有--cached参数,git diff 会显示当前你所有已做的但没有加入到索引里的修改.) 你也可以用git status命令来获得当前项目的一个状况:

$ git status

如果你要做进一步的修改, 那就继续做, 做完后就把新修改的文件加入到索引中. 最后把他们提交:

$ git commit -m "put a message to commit"

需要使用-m添加本次修改的注释,完成后就会记录一个新的项目版本.除了用git add 命令,我们还可以用

$ git commit -a -m "put a message to commit"

这会自动把所有内容被修改的文件(不包括新创建的文件)都添加到索引中,并且同时把它们提交。

四、分支与合并

1.分支

一个Git仓库可以维护很多开发分支。现在我们来创建一个新的叫 experimental的分支

$ git branch experimental

如果你运行下面这条命令:

$ git branch

你会得到当前仓库中存在的所有分支列表:

 experimental
* master

experimental 分支是你刚才创建的,master分支是Git系统默认创建的主分支。星号(“*”)标识了你当工作在哪个分支下,输入:

$ git checkout experimental

切换到”experimental”分支,先编辑里面的一个文件,再提交(commit)改动,最后切换回 “master”分支。

$ git commit -a -m "put a message to commit"
$ git checkout master

你现在可以看一下你原来在“experimental”分支下所作的修改还在不在;因为你现在切换回了“master”分支,所以原来那些修改就不存在了。 你现在可以在“master”分支下再作一些不同的修改:

$ git commit -a -m "put a message to commit"

这时,两个分支就有了各自不同的修改(diverged);我们可以通过下面的命令来合并“experimental”和“master”两个分支:

$ git merge experimental

如果这个两个分支间的修改没有冲突(conflict), 那么合并就完成了。如果有冲突,输入下面的命令就可以查看当前有哪些文件产生了冲突:

$ git diff

当你编辑了有冲突的文件,解决了冲突后就可以提交了:

$ git commit -a -m "put a message to commit"

这时你就可以删除掉你的 “experimental” 分支了(如果愿意):

$ git branch -d experimental

git branch -d只能删除那些已经被当前分支的合并的分支. 如果你要强制删除某个分支的话就用git branch –D;下面假设你要强制删除一个叫”crazy-idea”的分支:

$ git branch -D crazy-idea

2.解决合并中的冲突

如果执行自动合并没有成功的话,git会在索引和工作树里设置一个特殊的状态, 提示你如何解决合并中出现的冲突。 有冲突(conflicts)的文件会保存在索引中,除非你解决了问题并且更新了索引,否则执行 git commit都会失败 如果执行 git status 会显示这些文件没有合并(unmerged),这些有冲突的文件里面会添加像下面的冲突标识符:

<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt

你所需要的做是就是编辑解决冲突,(接着把冲突标识符删掉),再执行下面的命令:

$ git add file.txt
$ git commit -m "put a message to commit"

3.撒销一个合并

如果你觉得你合并后的状态是一团乱麻,想把当前的修改都放弃,你可以用下面的命令回到合并之前的状态:

$ git reset --hard HEAD

或者你已经把合并后的代码提交,但还是想把它们撒销:

$ git reset --hard ORIG_HEAD

但是刚才这条命令在某些情况会很危险,如果你把一个已经被另一个分支合并的分支给删了,那么以后在合并相关的分支时会出错

4.快速向前合并

还有一种需要特殊对待的情况,在前面没有提到。通常,一个合并会产生一个合并提交(commit), 把两个父分支里的每一行内容都合并进来。 但是,如果当前的分支和另一个分支没有内容上的差异,就是说当前分支的每一个提交(commit)都已经存在另一个分支里了,git 就会执行一个“快速向前"(fast forward)操作;git 不创建任何新的提交(commit),只是将当前分支指向合并进来的分支。

五、Git日志

1.查看日志

git log命令可以显示所有的提交(commit) 当然你也可以组合上面的命令选项;下面的命令就是找出所有从"v2.5“开始在fs目录下的所有Makefile的修改.

$ git log v2.5.. Makefile fs/

Git会根据git log命令的参数,按时间顺序显示相关的提交(commit)。

2.日志统计

如果用--stat选项使用‘git log‘,它会显示在每个提交(commit)中哪些文件被修改了, 这些文件分别添加或删除了多少行内容.

$ git log --stat

3.格式化日志

你可以按你的要求来格式化日志输出。‘--pretty‘参数可以使用若干表现格式,如‘oneline‘:

$ git log --pretty=oneline

或者你也可以使用 ‘short‘ 格式:

$ git log --pretty=short

你也可用‘medium‘,‘full‘,‘fuller‘,‘email‘ 或‘raw‘. 如果这些格式不完全符合你的相求, 你也可以用‘--pretty=format‘参数 另一个有趣的事是:你可以用‘--graph‘选项来可视化你的提交图(commit graph),它会用ASCII字符来画出一个很漂亮的提交历史(commit history)线。

4.日志排序

你也可以把日志记录按一些不同的顺序来显示。注意,git日志从最近的提交(commit)开始,并且从这里开始向它们父分支回溯。然而git历史可能包括多个互不关联的开发线路,这样有时提交(commits)显示出来就有点杂乱。 如果你要指定一个特定的顺序,可以为git log命令添加顺序参数(ordering option). 按默认情况,提交(commits)会按逆时间(reverse chronological)顺序显示。 但是你也可以指定‘--topo-order‘参数,这就会让提交(commits)按拓扑顺序来显示(就是子提交在它们的父提交前显示). 如果你用git log命令按拓扑顺序来显示git仓库的提交日志,你会看到“开发线"(development lines)都会集合在一起.

$ git log --pretty=format:‘%h : %s‘ --topo-order --graph

你也可以用‘--date-order‘参数,这样显示提交日志的顺序主要按提交日期来排序. 这个参数和‘--topo-order‘有一点像,没有父分支会在它们的子分支前显示,但是其它的东东还是按照时间来排序显示。你会看到"开发线"(development lines)没有集合一起,它们会像并行开发(parallel development)一样跳来跳去的:

$ git log --pretty=format:‘%h : %s‘ --date-order --graph

最后,你也可以用 ‘--reverse‘参数来逆向显示所有日志。

六、小结

本节讲解了几个基本命令:

  • git config:配置相关信息
  • git clone:复制仓库
  • git init:初始化仓库
  • git add:添加更新内容到索引中
  • git diff:比较内容
  • git status:获取当前项目状况
  • git commit:提交
  • git branch:分支相关
  • git checkout:切换分支
  • git merge:合并分支
  • git reset:恢复版本
  • git log:查看日志

七、练习

在github上创建一个账号,并新建一个仓库。

时间: 2024-10-13 04:32:00

Git基本用法(上)的相关文章

git基本用法

git基本用法 一.创建新仓库 touch README.md 创建一个新文件 git init       初始化当前文件夹为一个Git仓库 git add README.md 添加该文件到缓存区 git commit -m'update message' 提交更改到本地库 git remote add origin https://github.com/*/*.git 添加远程主机 git push -u origin master 提交更改到服务器 二.克隆仓库并提交更改 git clon

git revert 用法

git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交    * git revert HEAD                  撤销前一次 commit    * git revert HEAD^               撤销前前一次 commit    * git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次

Git 教程 - Git 基本用法

Git 是当前最流行的版本控制程序之一,文本包含了 Git 的一些基本用法 创建 git 仓库 初始化 git 仓库 mkdir project  # 创建项目目录 cd project  # 进入到项目目录 git init  # 初始化 git 仓库.此命令会在当前目录新建一个 .git 目录,用于存储 git 仓库的相关信息 初始化提交 touch README git add .  # 将当前目录添加到 git 仓库中, 使用 git add -A 则是添加所有改动的文档 git com

Git基本操作用法

Git基本操作用法 1.初始化操作 2.创建新版本库 3.修改和提交 4.撤消操作 5.查看提交历史 1.初始化操作 $ git config -global user.name <name> #设置提交者名字 $ git config -global user.email <email> #设置提交者邮箱 $ git config -global core.editor <editor> #设置默认文本编辑器 $ git config -global merge.to

git cherry-pick用法

场景: 如果你的应用已经发布了一个版本2.0, 代码分支叫release-2.0, 现在正在开发3.0, 代码的分支叫dev-3.0. 那么有一天产品说, 要把正在开发的某个特性提前上线, 也就是说要把dev-3.0分支上的某些更改移到2.x的版本上, 那么怎么办呢? 该cherry-pick上场了, cherry-pick会重演某些commit, 即把某些commit的更改重新执行一遍. 那么上述问题的解决方案如下: 基于release-2.0分支新建分支release-2.1, 并且到新创建

已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步代码时,还是提示输入密码?

GitHub虽好,但毕竟在国内访问不是很稳定,速度也不快,而且推送到上面的源码等资料必须公开,除非你给他交了保护费:所以有条件的话,建议大家搭建自己的Git Server.本地和局域网服务器都好,不信你试试,那速度,怎一个爽字了得! 默认情况下,使用TortoiseGit同步代码,每次都需要输入用户名和密码,但为了方便可以在客户端创建ssh密钥,用于服务器端和客户端的认证(详细过程大家可参考这里),但有时会出现“ 已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步

用Git向gitHub上传项目

用Git向gitHub上传项目 1.安装git 2.在git安装目录下,运行git-bash.exe  如图所示 3.在git中绑定你注册gitHub是的用户名.邮箱. $ git config --global user.name "gxn888"    // "gxn888"换成你的用户名$ git config --global user.email "[email protected]"    //[email protected]  换

GIT在Linux上的安装和使用简介

GIT在Linux上的安装和使用简介 解压后切换到其目录 $ tar xvfj git-1.7.6.tar.bz2 $ cd git-1.7.6 使用默认配置进行安装,如果想修改配置,可以使用 ./configure --help 来获取帮助 $ ./configure $ make $ make install 2.初始化配置 GIT默认安装在 /usr/local/bin ,安装之后可以验证一下是否安装好 $ whereis git git: /usr/local/bin/git $ git

利用git将项目上传到github

本文主要介绍如果用git将项目上传到githup. 一.准备工作 (1)欲将项目上传到githup,先在githup上新建一个仓库.这里就不介绍. (2)安装git,这里也不介绍. 二.开始上传 (1)进入到项目文件夹,调出git命令窗口,初始化仓库 git init (2)添加远程仓库 git remote add origin URL                   这个URL是刚刚创建的仓库地址 git remote add origin https://github.com/zxy1

GIT在Linux上的安装和使用简介心得

GIT在Linux上的安装和使用简介心得 Linux和Git之父Linus Torvalds曾说过这样一段话:        “Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” (低水平程序员总在考虑代码,高水平程序员总在考虑数据结构及其之间的关系)—— 来自 如何理解Linus Torvalds的“什么才是优秀程序员”的话. G