学习笔记--Git 基本用法
来源:互联网 发布:最有名的十大网络主播 编辑:程序博客网 时间:2024/05/17 00:13
Git的初始化:
配置git全局变量:
$ git config --global user.name "Scott"$ git config --global user.email "scott@gmail.com"
home目录下建立了一个隐藏的配置文件 .gitconfig :
$ cat .gitconfig
[user]
email = scott@gmail.com
name = Scott
Linux下使用Git
Caching your GitHub password in Git
获得一个 Git 仓库:
- Clone一个仓库
- 新建一个仓库
用mkdir
命令创建一个子目录:
$ cd /home/shiyanlou/$ mkdir project
进入到这个目录,把这个目录 初始化为Git仓库:
$ cd project$ git init
git会输出:
Initialized empty Git repository in /home/shiyanlou/project/.git/
通过 ls -la
会发现 project 目录下有一个名叫 .git 的文件被创建,这意味着一个仓库被初始化了。
正常的工作流程:
git的基本流程如下:
- 创建/修改 文件
- 使用
git add
命令 跟踪(track)新 创建/修改 的文件 - 使用
git commit
命令 提交到本地代码库 - 使用
git push
命令 将本地代码库同步至远端代码库(可选)
进入到刚刚建立的仓库 project,分别创建文件 file1, file2, file3:
$ cd project$ touch file1 file2 file3
修改文件内容,可以用vim编辑,可以使用vim编辑内容,也可以直接echo添加测试内容。
$ echo "testcontent1" >> file1$ echo "testcontent2" >> file2$ echo "testcontent3" >> file3
此时可以使用git status
命令查看当前git仓库的状态:
$ git statusOn branch masterInitial commitUntracked files: (use "git add <file>...") to include in what will be committed) file1 file2 file3nothing added to commit but untracked files present (use "git add" to track)
可以发现,这三个文件处于 untracked 状态,
我们可以用git add <filename>
命令将他们加入到缓存区(Index):
$ git add file1 file2 file3
然后再次执行git status
就会发现新的变化:
$ git statusOn branch masterInitial commitChanges to be committed: (use "git rm --cached <file>..." to unstage) new file: file1 new file: file2 new file: file3
表示 现在为 commit 做好了准备 ,还提示了:
使用git rm --cached <file>
命令 将文件移出缓存区(Index)。
可以使用 git diff --cached
命令,查看缓存区中哪些文件被修改了。输入q
可以退出命令:
$ git diff --cached
如果不加--cached
参数,git diff
会显示当前所有已做的但没有加入到缓存里的修改。
如果你要做进一步的修改, 那就继续做, 做完后就把新修改的文件加入到缓存区中。(再执行一次git add <file>
命令,否则会提示:
changes not staged for commit
(use “git add <file>… to update what will be committed)
(use “git checkout - - <file>…” to discard changes in working directory)
)
当所有 新建/修改 的文件都被添加到了缓存区,用git commit
将所有改动提交到本地仓库:
$ git commit -m "add 3 files"
使用-m
参数添加本次修改的注释,完成后就会记录一个新的项目版本,除了用git add <file>
命令,还可以用-a
参数将所有没加入到缓存区的修改也一起提交,但-a
不会添加新建的文件:
$ git commit -a -m "add 3 files"
再次输入git status
查看状态,会发现当前的代码库已经没有待提交的文件了,缓存区已经被清空:
On branch master
…
nothing to commit, working directory clean
至此,我们完成了第一次代码的提交。这次提交的代码中我们创建了三个新文件。需要注意的是如果是修改文件,也需要使用git add <file>
命令添加到缓存区才可以提交。如果是删除文件,则直接使用git rm <file>
命令删除后会自动将已删除文件的信息添加到缓存区,git commit
提交后就会将本地仓库中的对应文件删除。
这个时候如果本地的仓库连接到了远程Git服务器,可以使用下面的命令将本地仓库同步到远端服务器:
$ git push origin master
如果使用的origin master是github,这时系统会要求输入你的github用户名及密码,如果不想频繁的输入用户名密码,可以使用:
Caching your GitHub password in Git
Tip: You need Git 1.7.10 or newer to use the credential helper.
1). In Terminal, enter the following:
$ git config --global credential.helper cache# Set git to use the credential memory cache
2). To change the default password cache timeout, enter the following:
$ git config --global credential.helper 'cache --timeout=3600'# Set the cache to timeout after 1 hour (setting is in seconds)
更多关于git push
的用法
分支与合并:
Git的分支(branch)可以让你在主线(master)之外进行代码提交,同时又不会影响代码库主线。分支的作用体现在多人协作开发中。不同的人负责不同的分支,当各自的分支开发完成时,测试通过再把分支合并到主线。
1). 分支
一个Git仓库可以维护很多开发分支。现在创建一个新的叫 experimental的分支:
$ git branch experimental
运行 ‘git branch’ 可以查看当前的分支列表,以及目前的开发环境处在哪个分支上:
$ git branch experimental* master
git checkout <分支名>
可以切换到其他分支:
$ git checkout experimentalSwitched to branch 'experimental'
切换到experimental分支,切换完成后,先编辑里面的一个文件,再提交(commit)改动,最后切换回 “master”分支:
# 修改文件file1$ echo "update" >> file1# 查看当前状态$ git status# 添加并提交file1的修改$ git add file1$ git commit -m "update file1"# 查看file1的内容$ cat file1test//应给是textcontent1update# 切换到master分支$ git checkout master
查看下file1中的内容会发现刚才做的修改已经看不到了。因为刚才的修改时在experimental分支下,现在切换回了master分支,目录下的文件都是master分支上的文件了。
现在可以在master分支下再作一些不同的修改:
# 修改文件file2$ echo "update again" >> file2# 查看当前状态$ git status# 添加并提交file2的修改$ git add file2$ git commit -m "update file2 on master"# 查看file2的内容$ cat file2testupdate again
这时,两个分支就有了各自不同的修改,分支的内容都已经不同,如何将多个分支进行合并呢?
可以通过下面的git merge
命令来合并experimental到主线分支master:
# 切换到master分支$ git checkout master# 将experimental分支合并到master$ git merge -m 'merge experimental branch' experimental
-m参数仍然是需要填写合并的注释信息。
由于两个branch修改了两个不同的文件,所以合并时不会有冲突,执行上面的命令后合并就完成了。如果两个分支都改了同一个文件 file3,则会产生冲突,合并时会失败。
首先我们在master分支上修改file3文件并提交:
# 切换到master分支$ git checkout master# 修改file3文件$ echo "master: update file3" >> file3# 提交到master分支$ git commit -a -m 'update file3 on master'
然后切换到experimental,修改file3并提交:
# 切换到experimental分支$ git checkout experimental# 修改file3文件$ echo "experimental: update file3" >> file3# 提交到master分支$ git commit -a -m 'update file3 on experimental'
切换到master进行合并:
$ git checkout master$ git merge experimentalAuto-merging file3CONFLICT (content): Merge conflict in file3Automatic merge failed; fix conflicts and then commit the result.
合并失败后先用git status
查看状态,会提示file3的状态为both modified,查看file3内容会发现:
$ cat file3test//应该是testcontent3<<<<<<< HEADmaster: update file3=======experimental: update file3>>>>>>> experimental
上面的内容也可以使用git diff
查看,先前已经提到git diff
不加参数可以显示未提交到缓存区中的修改内容。
可以看到冲突的内容都被添加到了file3中,我们使用vim编辑这个文件,去掉git自动产生标志冲突的<<<<<<等符号后,根据需要只保留我们需要的内容后保存,然后使用git add file3和git commit命令来提交合并后的file3内容,这个过程是手动解决冲突的流程。
# 编辑冲突文件$ vim file3# 提交修改后的文件$ git add file3$ git commit -m 'merge file3'
当我们完成合并后,不再需要experimental时,可以使用下面的命令删除:
$ git branch -d experimental
git branch -d
只能删除那些已经被当前分支的合并的分支. 如果你要强制删除某个分支的话就用git branch –D
2). 撤销一个合并
如果你觉得你合并后的状态是一团乱麻,想把当前的修改都放弃,你可以用下面的命令回到合并之前的状态:
$ git reset --hard HEAD^# 查看file3的内容,已经恢复到合并前的master上的文件内容$ cat file3
3). 快速向前合并
还有一种需要特殊对待的情况,在前面没有提到。通常,一个合并会产生一个合并提交(commit), 把两个父分支里的每一行内容都合并进来。
但是,如果当前的分支和另一个分支没有内容上的差异,或者另一个分支完全包含当前分支,git 就会执行一个“快速向前”(fast forward)操作;git 不创建任何新的提交(commit),只是将当前分支指向合并进来的分支。
Git 日志
1). 查看日志
git log
命令可以显示所有的提交(commit)。
$ git log
如果提交的历史纪录很长,回车会逐步显示,输入q可以退出。
git log有很多选项,可以使用git help log查看,例如下面的命令就是找出所有从”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
参数定义格式。
4). 日志排序
为git log命令添加不同顺序的参数,可以使日志记录按不同的顺序来显示。
按默认情况,提交会按逆时间顺序显示,可以指定 --topo
-order
参数,让提交按拓扑顺序来显示(就是子提交在它们的父提交前显示):
$ git log --pretty=format:'%h : %s' --topo-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:查看日志
优秀资源分享:
从0开始学习 GitHub 系列
Git详解之二 Git基础
远程仓库GitHub的使用
本文整理自:
实验楼: Git实战教程-基本用法(上)
硬广!!!:点我注册 奖励实验豆3枚 ^_^
- 学习笔记--Git 基本用法
- Git学习笔记—基本命令及用法
- Git基本命令学习笔记
- git使用笔记1--基本用法
- Git学习之路--基本用法一
- Canvas 基本用法学习笔记
- Git 学习笔记 --- 安装和基本配置
- 【Git】学习笔记之基本操作
- Git学习笔记(八) Git基本操作
- Git学习笔记(2)--Git基本操作
- Git学习笔记(八) Git基本操作
- Git学习笔记---git安装及基本命令
- Git 教程 - Git 基本用法
- Git 教程 - Git 基本用法
- Git 教程 - Git 基本用法
- Git 教程 - Git 基本用法
- Git 教程 - Git 基本用法
- Git 教程 - Git 基本用法
- ES6新特性学习笔记—数字、数组、字符串
- 动作手游实时PVP技术揭密(服务器篇)
- 微信小视频录制
- windows系统下配置java环境变量
- 私有framework与android.jar共存
- 学习笔记--Git 基本用法
- Java-面向对象(高级篇)--final关键字
- 51红外功能函数
- 2016 ACM Amman Collegiate Programming Contest 训练赛部分题解
- css3学习之:transition
- 数组中只出现一次的数字
- think
- chrome浏览器怎么模拟手机访问网页
- Web学习笔记