- git --version
查看Git的版本
- 基本工作流程
git仓库 | 暂存区 | 工作目录 |
---|---|---|
用于存放提交的记录 | 临时存放被修改的文件 | 被git管理的项目目录 |
- 使用前配置
全局配置,一次安装只需要配置一次,信息保存至.gitconfig文件
git config --global user.name "用户名"
git config --global user.email "用户邮箱"
- 常用提交步骤
git init #初始化代码仓库
git status #查看文件状态
git add 文件列表 #追踪文件
git add * #添加所有文件到暂存区
git add . #同上
git add -u . #已追踪文件中的修改和删除文件添加到暂存区,不包括新增的文件
git add -A . #已追踪的文件的修改跟删除,和新增的未追踪的文件都添加到暂存区
git add *.html #添加某个类型的文件到暂存区,比如所有的html文件
git add /index #添加整个文件夹到暂存区,比如index文件夹
git commit -m "提交信息" #提交暂存区到本地仓库
git commit [file1] [file2] ... -m [messege] #提交暂存区的制定文件到仓库
git log #显示所有提交记录
git reflog #查看所有版本信息
git reset --hard 版本id #回退版本
git diff #表示未使用add命令时的修改
git rm <file> #将文件从暂存区和工作区中删除
git rm --cached <file> #将文件从暂存区删除
git remote -v #显示所有远程仓库
git remote add [shortname] [url] 添加远程版本库
eg:
$ git remote add origin git@github.com:someting.git
$ git push -u origin master
git remote rm name #删除远程库
git remote rename oldname newname
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master:brantest #将远程主机origin的master分支拉取下来,与本地brantest分支合并
git pull orgin master #远程分支与当前分支合并
git push <远程主机名> <本地分支名>:<远程分支名>
git push <远程主机名> <本地分支名> #本地分支与远程分支名相同
git push origin master #将本地master分支推送到远程orgin主机master分支,没有则创建一个远程master分支
git push --force origin master #远程库版本与本地版本有差异,可以强制推送
git push origin --delete master #删除origin主机的master分支
- git clone
git clone <repo>
eg:git clone git://github.com/schacon/grit.git
git clone <repo> <dir> #dir为本地目录
git clone -b branchname <repo> #克隆远程仓库的指定分支
- git分支管理
git branch #列出所有本地分支
git branch (branchname) #创建分支
git checkout (branchname) #切换分支
git merge (branchname) #将branchname分支与当前分支合并
git branch -d (branchname) #删除branchname分支
- git reset
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
git reset [HEAD]
实例:
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
--soft 参数用于回退到某个版本:
git reset --soft HEAD
实例:
$ git reset --soft HEAD~3 # 回退上上上一个版本
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
git reset --hard HEAD
实例:
$ git reset --hard HEAD~3 # 回退上上上一个版本
$ git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- 以此类推...
可以使用 ~数字表示
-
HEAD~0 表示当前版本
-
HEAD~1 上一个版本
-
HEAD^2 上上一个版本
-
HEAD^3 上上上一个版本
- 以此类推...
git reset HEAD
git reset HEAD 命令用于取消已缓存的内容。
我们先改动文件 README 文件,内容如下:
# Runoob Git 测试
# 菜鸟教程
hello.php 文件修改为:
<?php
echo '菜鸟教程:www.runoob.com';
echo '菜鸟教程:www.runoob.com';
echo '菜鸟教程:www.runoob.com';
?>
现在两个文件修改后,都提交到了缓存区,我们现在要取消其中一个的缓存,操作如下:
$ git status -s
M README
M hello.php
$ git add .
$ git status -s
M README
M hello.php
$ git reset HEAD hello.php
Unstaged changes after reset:
M hello.php
$ git status -s
M README
M hello.php
现在你执行 git commit,只会将 README 文件的改动提交,而 hello.php 是没有的。
$ git commit -m '修改'
[master f50cfda] 修改
1 file changed, 1 insertion(+)
$ git status -s
M hello.php
可以看到 hello.php 文件的修改并未提交。
这时我们可以使用以下命令将 hello.php 的修改提交:
$ git commit -am '修改 hello.php 文件'
[master 760f74d] 修改 hello.php 文件
1 file changed, 1 insertion(+)
$ git status
On branch master
nothing to commit, working directory clean
简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。