常⽤git命令以及idea中git的⽤法总结前⾔
最近本⼈将⼀些代码放到了github上,顺便总结了⼀下git的⽤法;经过了各种百度,最终形成了以下这篇⽂章。个⼈感觉追求效率的话,只看最后⼀条git常⽤命令即可。
前⾯的似乎有⽤,⼜似乎没⽤......
Git使⽤⽅法
简介
Git 是⼀个开源的分布式版本控制系统,⽤于敏捷⾼效地处理任何或⼩或⼤的项⽬。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发⽽开发的⼀个开放源码的版本控制软件。
Git 与常⽤的版本控制⼯具 CVS, Subversion 等不同,它采⽤了分布式版本库的⽅式,不必服务器端软件⽀持。
安装
Git⼯作流程
⼀般⼯作流程如下:
1.克隆 Git 资源作为⼯作⽬录。
2.在克隆的资源上添加或修改⽂件。
3.如果其他⼈修改了,你可以更新资源。
4.在提交前查看修改。
5.提交修改。
6.在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
下图展⽰了 Git 的⼯作流程:
Git ⼯作区、暂存区和版本库
⼯作区:就是你在电脑⾥能看到的⽬录。
暂存区:英⽂叫stage, 或index。⼀般存放在 ".git⽬录下" 下的index⽂件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。版本库:⼯作区有⼀个隐藏⽬录.git,这个不算⼯作区,⽽是Git的版本库。
下⾯这个图展⽰了⼯作区、版本库中的暂存区和版本库之间的关系:
图中左侧为⼯作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分⽀所代表的⽬录树。
图中我们可以看出此时 "HEAD" 实际是指向 master 分⽀的⼀个"游标"。所以图⽰的命令中出现 HEAD 的地⽅可以⽤ master 来替换。
图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" ⽬录下,⾥⾯包含了创建的各种对象及内容。
当对⼯作区修改(或新增)的⽂件执⾏ "git add" 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,⽽该对象的ID被记录在暂存区的⽂件索引中。
当执⾏提交操作(git commit)时,暂存区的⽬录树写到版本库(对象库)中,master 分⽀会做相应的更新。即 master 指向的⽬录树就是提交时暂存区的⽬录树。
当执⾏ "git reset HEAD" 命令时,暂存区的⽬录树会被重写,被 master 分⽀指向的⽬录树所替换,但是⼯作区不受影响。
当执⾏ "git rm --cached <file>" 命令时,会直接从暂存区删除⽂件,⼯作区则不做出改变。
当执⾏ "git checkout ." 或者 "git checkout -- <file>" 命令时,会⽤暂存区全部或指定的⽂件替换⼯作区的⽂件。这个操作很危险,会清除⼯作区中未添加到暂存区的改动。
当执⾏ "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会⽤ HEAD 指向的 master 分⽀中的全部或者部分⽂件替换暂存区和以及⼯作区中的⽂件。这个命令也是极具危险性的,因为不但会清除⼯作区中未提交的改动,也会清除暂存区中未提交的改动。
Git基本操作
1.git init
(1) 使⽤当前⽬录做为git仓库:
git init
该命令执⾏完毕后会在当前⽬录⽣成⼀个.git⽬录。
(2) 使⽤指定⽬录做为git仓库:
git init newrepo
该命令执⾏完毕后会在newrepo下⽣成.git⽬录。
2.将⽂件纳⼊版本控制:
$ git add *.c
$ git add README
$ git commit -m '初始化项⽬版本'
以上命令将当前⽬录下以 .c 结尾及 README ⽂件提交到仓库中。
3.git clone
(1)⽐如,要克隆代码仓库 Grit,可以⽤下⾯的命令:
$ git clone git://github/schacon/grit.git
执⾏该命令后,会在当前⽬录下创建⼀个名为grit的⽬录,其中包含⼀个 .git 的⽬录,⽤于保存下载下来的所有版本记录。
(2)如果要⾃⼰定义要新建的项⽬⽬录名称,可以在上⾯的命令末尾指定新的名字:
git常用指令
$ git clone git://github/schacon/grit.git mygrit
Git 与常⽤的版本控制⼯具 CVS, Subversion 等不同,它采⽤了分布式版本库的⽅式,不必服务器端软件⽀持。
4.git status
git status 以查看在你上次提交之后是否有修改。
使⽤ -s 参数,获得简短的结果输出。如果没加该参数会详细输出内容。
5.git diff
执⾏git diff来查看执⾏ git status 的结果的详细信息。
git diff 命令显⽰已写⼊缓存与已修改但尚未写⼊缓存的改动的区别。git diff 有两个主要的应⽤场景。
尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显⽰摘要⽽⾮整个 diff:git diff --stat以查看在你上次提交之后是否有修改。
6.git commit
使⽤ git add 命令将想要快照的内容写⼊缓存区,⽽执⾏ git commit 将缓存区内容添加到仓库中。
Git 为你的每⼀个提交都记录你的名字与电⼦邮箱地址,所以第⼀步需要配置⽤户名和邮箱地址。
$ git config --global user.name 'runoob'
$ git config --ail test@runoob
接下来我们写⼊缓存,并提交对 hello.php 的所有改动。在⾸个例⼦中,我们使⽤ -m 选项以在命令⾏中提供提交注释。$ git add hello.php
$ git commit -m '第⼀次版本提交'
如果你没有设置 -m 选项,Git 会尝试为你打开⼀个编辑器以填写提交信息。
如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你⽤ -a 选项跳过这⼀步。如下:
git commit -am '修改 hello.php ⽂件'
7.git reset HEAD
git reset HEAD 命令⽤于取消已缓存的内容。
$ git add .
$ git reset HEAD hello.php
现在你执⾏ git commit,就不会提交hello.php了。
8.git rm
如果只是简单地从⼯作⽬录中⼿⼯删除⽂件,运⾏ git status 时就会在 Changes not staged for commit 的提⽰。
要从 Git 中移除某个⽂件,就必须要从已跟踪⽂件清单中移除,然后提交。可以⽤以下命令完成此项⼯作
git rm <file>
如果删除之前修改过并且已经放到暂存区域的话,则必须要⽤强制删除选项 -f
git rm -f <file>
如果把⽂件从暂存区域移除,但仍然希望保留在当前⼯作⽬录中,换句话说,仅是从跟踪清单中删除,使⽤ --cached 选项即可git rm --cached <file>
可以递归删除,即如果后⾯跟的是⼀个⽬录做为参数,则会递归删除整个⽬录中的所有⼦⽬录和⽂件:
git rm –r *
进⼊某个⽬录中,执⾏此语句,会删除该⽬录下的所有⽂件和⼦⽬录。
9.git mv
git mv 命令⽤于移动或重命名⼀个⽂件、⽬录、软连接。
然后对其重名:
$ git mv README  README.md
Git分⽀管理
1.基本命令:
创建分⽀命令:
git branch (branchname)
切换分⽀命令:
git checkout (branchname)
当你切换分⽀的时候,Git 会⽤该分⽀的最后提交的快照替换你的⼯作⽬录的内容,所以多个分⽀不需要多个⽬录。
合并分⽀命令:
git merge
你可以多次合并到统⼀分⽀,也可以选择在合并之后直接删除被并⼊的分⽀。
2.列出分⽀:
列出分⽀基本命令:
git branch
没有参数时,git branch 会列出你在本地的分⽀。
当你执⾏ git init 的时候,默认情况下 Git 就会为你创建 master 分⽀。
⽤ git checkout (branch) 切换到我们要修改的分⽀。
也可以使⽤ git checkout -b (branchname) 命令来创建新分⽀并⽴即切换到该分⽀下,从⽽在该分⽀中操作。
3.删除分⽀:
删除分⽀命令:
git branch -d (branchname)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。