`
nothing.whoami
  • 浏览: 52939 次
社区版块
存档分类
最新评论

【分享】笔记《版本控制之道--使用Git》

    博客分类:
  • Git
Git 
阅读更多

 

我认为每个学过Git的人都应该做过类似这种笔记,因为Git命令太多看着看着就把前边看过的忘了,之前我也看过Git,但是一直没用,现在一看几乎没有印象了,所以这次我要把我看到的命令记下来给我自己备忘。

Git已经是最流行的版本控制系统了,网上相关的免费学习资源很多,我见过的中文书籍就有:

但我是买的一本纸质书叫做《版本控制之道—使用Git》,下边是我记录的几乎是整本书讲过的所有命令:

设置

git config —global user.name “Nshen” //必须
git config —global user.email “nshen121@gmail.com” //必须
git config —global color.ui “always” //或者"auto", always不仅Base环境是彩色,Dos里也是彩色的。
git config —global core.editor notepad.exe //设为windows记事本
git config —global alias.ci “commit” //别名缩写
git config —global merge.tool //可以设置合并工具
git config —global —list //查看设置

其实最后这些设置都保存在C:\Documents and Settings\用户名\.gitconfig 文件下(windows)

查看帮助: git help command

初始化 :

git init

纳入版本控制:

git add *.txt //添加所有txt文件
git add  README   //添加单个文件
git add . //添加所有文件包括子目录,但不包括空目录

add命令是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)注意每次修改后都要重新add,不然就会提交之前add时的版本。

git add -i //进入交互式add
git add -p //直接进入补丁模式,可以暂存修改的一部分。

提交:

git commit -m “initial project version”
git commit -m “something” someFile //提交指定文件
git commit -C  HEAD   -a —amend //复用HEAD留言,增补提交(修改小错误,而不增加提交记录,掩盖自己的小马虎)

参数:

-m “提交的说明”
-a 动把所有已经跟踪过的文件暂存,并提交.(工作目录中修改过的文件都提交到版本库,不需一个一个手动add了)
—amend 增补提交
-C 复用指定提交的提交留言
-c 打开编辑器在已有的提交基础上编辑修改

e.g 修改最后一次提交:

git commit -m 'initial commit'
git add forgotten_file
git commit --amend

如果没有修改就相当于更改提交说明,上边3个命令得到一个提交.

忽略提交的文件:

所有人都需要忽略的文件要写在.gitignore文件里,而只有自己的个人偏好需要忽略的文件要写在.git/info/exclude文件中

语法:

#
 此为注释 – 将被 Git 忽略*.a       # 忽略所有 .a 结尾的文件
!lib.a    # 但 lib.a 除外
*.[oa]  #忽略以.o或.a结尾的文件
*~      #忽略以~结尾的文件
/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/    # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

查看文件改动:

git diff // 比较工作目录与缓存区的区别
git diff —cached 或者 git diff —staged //缓存区与版本库里的区别
git diff  HEAD   //三者的区别

请注意,单单 git diff 不过是显示还没有暂存起来的改动,而不是这次工作和上次提交之间的差异。所以有时候你一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。
git diff 18f822e //18f822e这个版本与当前目录的区别

git diff aaaaa..bbbbb //比较aaaaa与bbbbb之间差别
git diff —stat可以统计数据,比较特别的命令

重命名,移动,删除文件:

git mv file_from file_to //改名或移动

$
 git mv README.txt README$
 git status#
 On branch master#
 Your branch is ahead of 'origin/master'
 by 1 commit.#
#
 Changes to be committed:#
   (
use "git reset HEAD <file>..."
 to unstage)
#
#
       renamed:    README.txt -> README

其实,运行 git mv 就相当于运行了下面三条命令:

$ mv  README .txt  README
$ git rm  README .txt
$ git add  README

必须调用 git rm 文件名 //从暂存区移除,并且文件也被删除

如果只是手工删除了文件,运行git status时会出现

#
 Changed but not updated:#
   (
use "git add/rm <file>..."
 to update what will be committed)
#
#
       deleted:    grit.gemspec

此时必须再运行 git rm 文件名,才会在提交时候不再纳入版本管理.
如果删除之前修改过并且已经add到缓存区了的话,则必须强制删除 -f

另外一种情况是,我们想把文件从Git仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如 一些大型日志文件或者一堆.a编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 —cached 选项即可:

查看状态:

查看当前状态:

git status

$
 git status#
 On branch master#
 Changes to be committed:  //只要在这行后边的,说明放入暂存区了#
   (
use "git reset HEAD <file>..."
 to unstage)
 //想取消放入缓存 git reset HEAD README#
#
     new file:   README#
 Changed but not updated:  //跟踪文件内容改变,但还没有放到暂存区,需要git add 命令才会放到暂存区#
   (
use "git add <file>..."
 to update what will be committed)
#
   (
use "git checkout -- <file>..."
 to discard changes in working directory)
 //删除修改,恢复到之前版本,有危险 (
如果想保留并且回退版本用stashing 和分支来处理)
#
     modified:   benchmarks.rb

查看提交历史:

git log

这时“j”向下浏览,“k”向上浏览,“q”退出

git log —pretty=oneline //一行显示
—pretty=“%h %s” //以各种格式输出

git log –p -2 //-p显示每次提交的内容差异 -2表示最近2次更改

git log —since “5 hours”
—since “3 hours”
—since “1 minute”
—before =“2008-10.01”

git log 27j34j3j..03u43u23 //最老版本..最新版本(不包括起点只包括终点)
git log 34j4j4..HEAD
git log fhfs8fh.. //省略HEAD
git log “HEAD ^^”..“HEAD ^” //windows必须加引号表示回溯上一个提交
git log -1  HEAD ~1 //相当于git log -1  HEAD ^

git log —graph //图形化显示分支
git log —graph —pretty=oneline //一行图形化显示分支

问责:查明谁修改了代码

git blame hello.html //你也可以用"-L"参数在命令(blame)中指定开始和结束行:
git blame -L 12,+10 hello.html //12到22行
blame还可以跟踪内容复制,文件复制,略,见版本控制之道 79页

撤销:

撤销缓存区的修改(没有commit的)

git checkout head 文件名 //撤销暂存区的修改
git checkout head readme.txt todo.txt
git checkout head *.txt
git checkout head . //撤销所有

反转提交:

git revert  HEAD   //创建一个反向的新提交抵消原来的提交改动
如果需要反转多个,必须从最后的开始反转, 加 -n可以不马上提交,之后一起提交。
git revert -n  HEAD
git revert -n 54efhds
git commit -m “revert head and 54efhds”

复位:还没有commit,让工作目录回到上次提交时的状态

git reset —hard  HEAD   //所有未提交的内容清空,这会让"git diff" 和"git diff —cached"命令的显示法都变为空
git reset —soft  HEAD   //复位版本库,暂存差异,便于提交中发现错误需要更改时有用(例如私人密码放到里边了)

分支:

在当前分支末梢建立分支:

git branch RB_1.0(建立分支不会自动切换过去)

切换分支:

git checkout RB_1.0(切换到RB_1.0分支)

创建并切换分支:

git checkout -b RB_1.0(简化上边2步操作)

删除分支:

git branch -d RB_1.0

基于某次提交、分支或标签创建新分支:

git branch RB_1.0 master
git branch RB_1.0 6fe57de0
git branch Rb_1.01 1.0

查看分支:

git branch //列出本地分支
  iss53
* master  //*号表示当前所在分支
  testing

git branch -r //显示远程分支
git branch -a //列出所有分支

分支重命名:

git branch -m master mymaster
-M 大写M会覆盖同名的分支

合并分支:

直接合并:
git merge 想合并到当前分支的源分支名
git merge —no-commit 分支 //合并但不提交

压合合并:将分支压合成一条commit记录,并合并过来
git merge —squash 某bug分支
git commit -m “修复某bug”

拣选合并:只合并一个提交
git cherry-pick 321d76f
如果需要连续拣选,就需要加 -n参数
然后再git commit ,但不要加-m参数,编辑器就会使用刚拣选的提交留言作为现在的留言。

标签Tag:

查看标签:

git tag

创建标签:

git tag 1.0 //在当前分支最后一次提交创建标签
git tag 1.0 RB_1.0 //基于RB_1.0分支的最新踢脚创建标签
git tag 1.0 ae468d8kt //为某次提交创建标签

检出标签:

git checkout 1.0 //检出标签与检出分支一样操作,但检出标签后用git branch查看本地分支会发现你现在不再任何分支上
这时你不应该修改,而应该立即基于此标签创建一个分支
git checkout -b from-1.0

变基:

1)git rebase RB_1.01 //也许修改过一个bug,希望新版本变基到RB_1.01分支上
2)手动解决冲突 //如果解决不了直接git rebase  -skip或 -abort来跳过特定提交或完全放弃变基
3)git add xxx.html //冲突解决
4)git rebase —continue

git rebase --onto HEAD^^ HEAD^ HEAD 

//—onto参数可以改写历史抹掉中间的参数,将倒数第一个参数变基到倒数第3个参数,为防止出错建议在试验性分支上先试验。

rebase -i 可以排序历史记录,多个提交合并为1个,一个提交分解成多个提交 ,
详见版本控制之道p86 ,需要编辑器支持,windows记事本不行

远程相关:

git clone git://github.com/schacon/grit.git //从现有仓库克隆
git clone git://github.com/schacon/grit.git mygrit //换名,唯一区别就是新建的目录成了mygrit,其他都一样

添加远程仓库:

git remote add pb git://github.com/paulboone/ticgit.git
clone会默认添加origin仓库,如果原本用git init创建的版本库,后来又想提交到远程版本库,就可以用下边的办法
git remote add origin git@example.com:/xxxxxx

查看远程分支:

git remote -v //查看远程仓库,默认clone后,应该有一个origin仓库,-v显示对应的clone地址
git remote show origin //查看远程仓库信息

远程仓库重命名和删除:

git remote rename pb paul
git remote rm paul

获取数据:

git fetch [remote-name] 拉取远程仓库到本地远程仓库,不自动合并    //$ git fetch origin
$
 git fetch pbremote: Counting objects: 58, done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 44 (delta 24), reused 1 (delta 0)
Unpacking objects: 100% (44/44), done.
From git://github.com/paulboone/ticgit
* [new branch]      master     -> pb/master
* [new branch]      ticgit     -> pb/ticgit

现在pb/master可以在本地访问了,你可以合并到自己的某个分支,或者切换到这个分支看看有什么有趣的更新

git pull 抓取数据合并到工作目录中当前分支

推送数据:

git push [remote-name] [branch-name] //默认为 git push origin master

git push origin serverfix //推送分支,其实是下边一句的简化,提取我的 serverfix 并更新到远程仓库的 serverfix

git push origin serverfix:serferfix

git push origin :serverfix //这个语法用于删除,只要把分号前留空

其他:

git gc //垃圾回收,每隔一段时间例如一个月运行一次可以减少磁盘占用空间。
git reflog //最后的保障,列出误删的东东
git bisect //二分查找,版本控制之道p124页,略

归档版本库,导出压缩包:

git archive —format=格式 —prefix=目录/ 版本>压缩包.zip
git archive —format=zip head>test.zip
git archive —format=tar —prefix=mysite-1.0/ 1.0 | gzip>mysite-1.0.tar.gz
git archive —format=zip —prefix=mysite-1.0/ 1.0 >mysie-1.0.zip

 

原Blog为:http://www.nshen.net/sitelog/2011/08/03/git-note.html【支持】

分享到:
评论

相关推荐

    git分享笔记

    - 相比之下,分布式版本控制系统更为安全,因为每个使用者的电脑上都存有完整的版本库。这样即使某一台电脑出现问题,也不会影响其他用户的使用,数据可以轻易地从其他用户那里复制回来。 - 文档还强调了分布式...

    自己做的git笔记分享。

    **Git** 是一个分布式版本控制系统,用于跟踪计算机文件的更改并协调多人合作的工作。它最初由Linus Torvalds于2005年创建,目的是作为一种改进的工具来管理Linux内核源代码。 #### 二、初始化本地仓库 在开始使用...

    git命令笔记

    - **应用场景**: 当你需要将一个非版本控制的项目加入到Git管理时使用。 #### 添加文件到仓库 - **命令**: `git add &lt;file&gt;` - **功能**: 将文件添加到暂存区,准备进行版本控制。 - **应用场景**: 当你完成了某个...

    Git 笔记整理 Git 构建分布式版本控制系统.zip分享给需要的同学

    Git 笔记整理 Git 构建分布式版本控制系统.zip分享给需要的同学

    辛星笔记之Pro Git

    辛星笔记之ProGit涵盖了版本控制、git基础、git分支管理、服务器上git的使用、分布式git概念、git工具使用、自定义git、以及git内部原理等关键知识点。下面将详细介绍这些知识领域。 版本控制是一种记录文件内容...

    Git-2.29.2.3-64-bit.zip

    Git是开发人员必备的工具,尤其对于使用版本控制进行软件开发的团队来说,它的重要性不言而喻。 在压缩包内的文件列表中,我们有两个文件:"Git-2.29.2.3-64-bit.exe" 和 "123.txt"。"Git-2.29.2.3-64-bit.exe" 是...

    python1903笔记 05-git.zip

    在Python学习过程中,掌握版本控制工具是至关重要的,Git作为最流行的一种版本控制系统,被广泛应用于软件开发。...通过学习这份笔记,你将能够有效地使用Git进行代码版本控制,提高开发效率和团队协作能力。

    2018尚硅谷Git和GitHub视频教程

    #### 一、为什么使用版本控制? 版本控制系统(Version Control System, VCS)是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。它帮助开发者追踪项目的历史改动,支持多人合作,避免文件...

    czbk公开课笔记git 两小时学会Git玩转Github.zip

    Git是世界上最流行的分布式版本控制系统,而GitHub则是全球最大的开源软件托管平台。本压缩包文件“czbk公开课笔记git 两小时学会Git玩转Github.zip”包含了一份详细的Git学习指南,旨在帮助用户在短时间内掌握Git的...

    两小时学会Git玩转Github-资料 零散笔记

    Git是一种分布式版本控制系统,由Linus Torvalds(Linux的创造者)发起,并且目前是开放源代码社区中最流行的版本控制工具之一。Github是一个基于Git的代码托管平台,它提供了一个Web界面,使得用户可以方便地创建、...

    二维码扫描笔记源代码--简单好用

    - **版本控制**:使用Git进行版本控制,便于团队协作和代码回溯。 - **发布流程**:通过Google Play Console发布应用,遵循其提交指南和合规政策。 总之,这个“二维码扫描笔记源代码”项目涵盖了Android应用开发...

    git学习笔记

    ### git学习笔记 #### 分支的重要性与应用 在软件开发过程中,分支的使用至关重要,它不仅能够提升开发效率,还能确保代码的质量与稳定性。本文将详细介绍如何利用Git中的分支进行高效协作开发,并探讨其与其他...

    用于Python运行可重复实验的响应式笔记本,以脚本形式执行,以应用程序形式部署,并使用git版本.zip

    “并使用git版本”意味着该项目利用了Git进行版本控制。Git是一种分布式版本控制系统,它允许开发者追踪代码的修改历史,协作开发,并方便地回溯到任何过去的代码状态。这对于大型项目和团队合作至关重要,确保每个...

    GitHub的使用方法 ,一个基于 Git 的在线代码托管平台.docx

    - 通过集成Git版本控制系统,GitHub使开发者能够跟踪每一处代码变更,轻松回滚到之前的版本,并且方便多人协作开发项目。 3. **项目管理**: - GitHub提供了issue和pull request系统,帮助开发者跟踪项目中的问题...

    roam-to-git

    "roam-to-git"是一个可能与Roam Research和Git相关的项目,Roam Research是一款流行的笔记应用程序,而Git是广泛使用的版本控制系统。这个项目的名字暗示着它可能是为了将Roam Research中的数据同步或备份到Git仓库...

    2023-03-31 项目笔记-第一阶段-4.变量、常量 4.3.1 变量的使用

    在使用Git进行版本控制时,基础操作包括`add`(将更改添加到暂存区)、`commit`(保存暂存区的更改到本地仓库)和`push`(将本地仓库的更改推送到远程仓库)。通过掌握Git,不仅可以管理个人项目,还能参与开源社区...

    2023-03-31 项目笔记-第一阶段-1.什么是C语言 2.第一个C语言程序

    【C语言概述】 C语言是一种高级编程语言,由贝尔实验室的Dennis Ritchie在1972年开发,主要用于编写操作系统。...了解和掌握Git版本控制系统也是必要的,不仅限于基本操作,还需深入学习其工作原理和高级用法。

    使用docsify搭建的个人学习主站,主要记载学习笔记,包括但不限于Java多线程、设计模式、MySQL及Git等各.zip

    在本项目中,作者使用了docsify框架来创建一个个人学习主站,旨在记录和分享其在多个IT领域的学习笔记,主要包括Java多线程、设计模式、MySQL数据库以及Git版本控制等方面的知识。以下是对这些主题的详细阐述: 1. ...

    笔记.rar-自己的笔记,留一个备份

    10. **部署与运维**:如使用Git进行版本控制,Docker容器化,以及如何将项目部署到云服务(如Heroku或AWS)。 这份笔记不仅是作者个人学习的见证,也是其他开发者学习和参考的宝贵资源。它可能包含了实践案例、代码...

    git-puf-noktalari:我的新迷你书介绍了我们在日常生活中使用的版本控制系统GIT的一些小技巧。

    此外,我将分享我随着时间推移收集并从笔记中收集来的技巧。 什么是提交消息? 好的提交消息应该如何显示? 简单用例 三阶段档案系统 交互式添加: git add -i 在补丁模式下添加: git add -p 回购状态: git ...

Global site tag (gtag.js) - Google Analytics