以前一直用的svn,最近开始学习使用git来进行版本控制,放一些git指令备忘。
在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
基本的 Git 工作流程如下:
- 在工作目录中修改某些文件。
- 对修改后的文件进行快照,然后保存到暂存区域。
- 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
$ git config --global user.name "your name" $ git config --global user.email "your email"
要检查已有的配置信息,可以使用 git config --list
命令
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行 git init,初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中.
如果对当前目录要纳入控制的话,使用 git add 文件名/目录命令告诉git对这些文件进行版本追踪,然后使用 git commit - m "修改备注" 进行提交,尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给git commit
加上 -a
选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add
步骤
克隆仓库的命令格式为 git clone [url] 如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字
要确定哪些文件当前处于什么状态,可以用 git status
命令
实际上 git status
的显示比较简单,仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,可以用 git diff
命令,要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff ,若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用
git diff --cached
命令,(Git 1.6.1 及更高版本还允许使用git diff --staged
,效果是相同的,但更好记些。)
如果只是简单地从工作目录中手工删除文件,运行 git status
时就会在 “Changes not staged for commit” 部分(也就是未暂存清单)看到,然后再运行 git rm
记录此次移除文件的操作,最后提交的时候,该文件就不再纳入版本管理了。如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
(译注:即 force 的首字母),以防误删除文件后丢失修改的内容。我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中 ,用--cached
选项即可 。
在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log
命令查看。我们常用 -p
选项展开显示每次提交的内容差异,用 -2
则仅显示最近的两次更新。
取消工作目录中已修改的文件,可以使用 git reset HEAD <file>...
的方式取消暂存。
要查看当前配置有哪些远程仓库,可以用 git remote
命令,它会列出每个远程库的简短名字,也可以加上 -v
选项(译注:此为 --verbose
的简写,取首字母),显示对应的克隆地址。
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]
可以用 git fetch [remote-name]从远程仓库抓取数据到本地,可以使用
git pull
命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支
git push [remote-name] [branch-name] 可以将本地仓库中的数据推送到远程仓库.
可以通过命令 git remote show [remote-name]
查看某个远程仓库的详细信息
在新版 Git 中可以用 git remote rename
命令修改某个远程仓库在本地的简称
碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行git remote rm
[远程库简称]命令 .
可以使用git branch [分支名] 来新建分支,使用 git checkout [分支名] 来进行分支切换,要新建并切换到该分支,运行 git checkout
-b [分支名],使用 git branch
的 -d
选项执行删除分支操作
可以用 用 git merge
[要合并的分支名]命令来进行合并,也可以使用git rebase进行分支合并
git branch
命令不仅仅能创建和删除分支,如果不加任何参数,它会给出当前所有分支的清单,若要查看各个分支最后一个提交对象的信息,运行 git branch -v,要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用
--merge
和 --no-merged
选项(Git 1.5.6 以上版本)。