git --version
git config --list
git config --global user.name "用户名称"
git config --global user.email "用户邮箱"
如果去掉 –global 参数只对当前仓库有效。当前的配置只是配置本地的用户信息,并不会影响远程仓库,所以可以随便写,知识作为本地仓库的一个用户信息标识。
git init
从现有Git仓库拷贝项目:
git clone <repo> <directory>
repo:Git 仓库地址
directory:本地目录
示例:
git clone git://github.com/schacon/grit.git
执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。
如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:
git clone git://github.com/schacon/grit.git mygrit
将工作区的文件添加到暂存区:
git add . // 直接把全部文件添加到暂存区
git add *.c // 把.c为结尾的文件添加到暂存区
git add README // 把README文件添加到暂存区
git add *.c README // 添加多个文件
查看仓库当前的状态,显示有变更的文件:
git status // new file 就表示新添加的文件
git status -s // -s 用来获得简短的输出结果 AM表示有改动,A表示无改动
比较文件的不同,即暂存区和工作区的差异:
git diff // 尚未缓存的改动
git diff --cached // 查看已缓存的改动
git diff HEAD // 查看已缓存的与未缓存的所有改动
git diff --stat // 显示摘要而非整个 diff
命令后面可以添加file。
暂存区添加到版本库:
git commit -m '提交说明' // 提交暂存区所有的文件
git commit [file1] [file2] ... -m [message] // 提交暂存区的指定文件到仓库区
git commit -am [message] // -a 参数设置修改文件后不需要执行 git add 命令,直接来提交
-m
的作用就是填写提交信息,如果没有-m,Git 会尝试为你打开一个编辑器以填写提交信息。
注: 在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "。
所以在 git bash
中 git commit -m ‘提交说明’ 这样是可以的,在 Windows 命令行
中就要使用双引号 git commit -m “提交说明”。
git reset 命令用于回退版本,可以指定退回某一次提交的版本:
git reset [--soft | --mixed | --hard] [HEAD]
–mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变:
git reset HEAD^ // 回退所有内容到上一个版本
git reset HEAD^ hello.php // 回退 hello.php 文件的版本到上一个版本
git reset 052e // 回退到指定版本
–soft 参数用于回退到某个版本:
git reset --soft HEAD~3 # 回退上上上一个版本
–hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
git reset --hard HEAD~3 // 回退上上上一个版本
git reset –hard bae128 // 回退到某个版本回退点之前的所有信息。
git reset --hard origin/master // 将本地的状态回退到和远程的一样
注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
可以使用 ~数字表示
git rm 命令用于删除文件,如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示,将文件从暂存区和工作区中删除:
git rm <file>
git rm runoob.txt // 从暂存区和工作区中删除 runoob.txt 文件
git rm -f runoob.txt // 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm --cached <file> // 把文件从暂存区域移除,但仍然希望保留在当前工作目录
git rm --cached runoob.txt // 从暂存区中删除 runoob.txt 文件
-f:强制执行(force);
–cached:只操作暂存区。
git mv 命令用于移动或重命名一个文件、目录或软连接:
git mv [file] [newfile]
git mv -f [file] [newfile] // 如果新文件名已经存在,但还是要重命名它,可以使用 -f 参数
f:强制执行(force)。
在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看:
git log
git log --oneline // 用 --oneline 选项来查看历史记录的简洁的版本
git log --graph --oneline // 用 --graph 选项查看历史中什么时候出现了分支、合并,开启了拓扑图选项
git log --reverse --oneline // 用 --reverse 参数来逆向显示所有日志
git log --author=Linus --oneline -5 // 查找指定用户的提交日志可以使用命令:git log --author -5 是显示近5个提交记录
// 指定日期可以执行几个选项:--since 和 --before,也可以用 --until 和 --after
// 如要看 Git 项目中三周前且在四月十八日之后的所有提交,可以执行这个(--no-merges 选项以隐藏合并提交)
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
要查看指定文件的修改记录可以使用 git blame 命令:
git blame <file>
git blame README // 示例
显示所有远程仓库:
git remote -v
注意:一般会用 origin 作为远程地址的别名
显示某个远程仓库的信息:
git remote show [remote]
git remote show https://github.com/tianqixin/runoob-git-test // 示例
添加远程版本库:
git remote add [shortname] [url]
shortname 为远程仓库的ip别名,一般用origin,url为远程地址,如:
git remote add origin git@github.com:tianqixin/runoob-git-test.git
git push -u origin master
删除远程仓库:
git remote rm name
git remote rename old_name new_name
获取远程仓库最新的代码:
git fetch [alias]
将服务器上的任何更新(假设有人这时候推送到服务器了)合并到当前分支:
git merge [alias]/[branch]
注意: 为什么要用 git fetch 和 git merge 而不是直接用 git pull(git pull 其实就是git fetch + git merge)?
因为git pull会直接把你本地仓库中的代码进行更新但问题是可能会有冲突(conflicts),个人不推荐。先 git fetch origin(把远程仓库中origin最新代码取回),再 git merge origin/master(把本地代码和已取得的远程仓库最新代码合并),如果你的改动和远程仓库中最新代码有冲突,会提示,再去一个一个解决冲突。
示例:
git fetch origin
git merge origin/master
git pull 其实就是 git fetch
和 git merge FETCH_HEAD
的简写:
git pull <远程主机名> <远程分支名>:<本地分支名>
示例:
// 将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并
git pull origin master:brantest
// 如果远程分支是与当前分支合并,则冒号后面的部分可以省略(本地分支不写就是默认当前分支)
git pull origin master
注意:origin 其实就是远程ip地址的别名,master 就是该地址仓库下的分支,brantest是本地的分支
git push 命令用于从将本地的分支版本上传到远程并合并:
git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
示例:
git push origin master // 等同于 git push origin master:master
git push --force origin master // 如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
git push origin --delete master // 删除 origin 主机的 master 分支
几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
创建分支:
git branch (branchname)
注意:创建分支后需要手动切换到创建的分支下面
切换分支:
git checkout (branchname)
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。
合并分支:
git merge
查看分支:
git branch
在本地使用 git init 命令的时候会默认创建一个名为 master 的分支。
创建新分支并立即切换到该分支:
git checkout -b (branchname)
删除分支:
git branch -d (branchname)
如果达到一个重要的阶段,并希望永远记住那个特别的提交快照,可以使用 git tag 给它打上标签。
比如说,我们想为我们的 runoob 项目发布一个"1.0"版本。 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)“v1.0"的标签。
-a 选项意为"创建一个带注解的标签”。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。 我推荐一直创建带注解的标签。
添加标签:
git tag -a v1.0
执行 git log --decorate 时,可以看到添加的标签:
git log --decorate
给指定的commit号追加标签:
git tag -a v0.9 85fc7e7
查看已存在的标签:
git tag
删除标签:
git tag -d v1.1
查看此版本所修改的内容:
git show v1.0
指定标签信息命令:
git tag -a <tagname> -m "runoob.com标签"
PGP签名标签命令:
git tag -s <tagname> -m "runoob.com标签"