Git原生工具gitbash使用提交代码
一. Git下载、安装
官网慢,可以用国内的镜像:https://npm.taobao.org/mirrors/git-for-windows/
二. Git配置
$ git config --system //读写"/etc/gitconfig"文件,配置对系统中的所有用户生效
$ git config --global //读写"~/.gitconfig"文件,是用户目录下的配置,只适用于该用户
- 用户信息
$ git config --global user.name "xxx" //配置用户名
$ git config --global user.email "123456@qq.com" //配置邮箱
- 查看配置信息
$ git config --list
△ 如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
△ 如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
三.几个命令
常用命令整理
(1) 创建仓库命令
命令 | 说明 |
---|---|
git init | 初始化仓库 |
git clone | 拷贝一份远程仓库,也就是下载一个项目。 |
(2) 提交与修改
命令 | 说明 |
---|---|
git add | 添加文件到仓库 |
git status | 查看仓库当前的状态,显示有变更的文件。 |
git diff | 比较文件的不同,即暂存区和工作区的差异。 |
git commit | 提交暂存区到本地仓库。 |
git reset | 回退版本。 |
git rm | 删除工作区文件。 |
git mv | 移动或重命名工作区文件。 |
- 【add】命令
当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
$ git add [file1] [file2] ... //添加一个或多个文件到暂存区
$ git add [dir] //添加指定目录到暂存区,包括子目录
$ git add . //添加当前目录下的所有文件到暂存区
△ 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
△ 当执行 git rm --cached < file > 命令时,会直接从暂存区删除文件,工作区则不做出改变。
△ 当执行 git checkout . 或者 git checkout – < file > 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
△ 当执行 git checkout HEAD . 或者 git checkout HEAD < file > 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
$ git status -s //通常我们使用 -s 参数来获得简短的输出结果:
AM README //AM代表有未add的修改
A hello.php //A代表修改都已add
注:
尚未缓存的改动: git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动: git diff HEAD
显示摘要而非整个 diff: git diff --stat
$ git diff [file] //显示暂存区和工作区的差异
$ git diff --cached [file] //显示暂存区和上一次提交(commit)的差异
(或 $ git diff --staged [file])
$ git diff [first-branch]...[second-branch] //显示两次提交之间的差异
- 【commit】命令
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
开始前我们需要先设置提交的用户信息,包括用户名和邮箱:
$ git config --global user.name 'xxx'
$ git config --global user.email test@qq.com
注:如果去掉 --global 参数只对当前仓库有效。
git commit -m [message]
$ git commit [file1] [file2] ... -m [message]
注:如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。
- 【init】命令
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。
$ git init projectName //在当前目录创建文件夹“projectName”,文件夹中会带有一个隐藏的.git文件夹
所有 Git 需要的数据和资源都存放在这个目录中。
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:
$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'
- 【clone】命令
我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。
$ git clone <repo> <directory> <newName>
repo:Git 仓库。
directory:本地目录。(可不写,就是当前打开gitbash的目录)
newName:还可以使用自定义的项目名称(指定新的名称)
- 【reset】命令
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
注:–mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
实例
$ git reset HEAD^ //# 回退所有内容到上一个版本
$ git reset HEAD^ hello.php //# 回退 hello.php 文件的版本到上一个版本
$ git reset 052e //# 回退到指定版本
$ git reset --soft HEAD //--soft 参数用于回退到某个版本
$ 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 上上上一个版本
- 以此类推…
- 【rm】命令
git rm 命令用于删除文件。
git rm runoob.txt //从暂存区和工作区中删除 runoob.txt 文件
git rm -f runoob.txt //强行从暂存区和工作区中删除修改后的 runoob.txt 文件
git rm --cached runoob.txt //从暂存区中删除 runoob.txt 文件(工作区保留)
- 【mv】命令
git mv 命令用于移动或重命名一个文件、目录或软连接。
$ git mv [file] [newfile]
$ git mv -f [file] [newfile] //如果新但文件名已经存在,但还是要重命名它,可以使用 -f 参数:
- 【remote】命令,远程仓库操作
$ git remote -v //显示所有远程仓库
$ git remote show https://github.com/tianqixin/runoob-git-test //显示某个远程仓库的信息
git remote add [shortname] [url] //添加远程版本库
# 提交到 Github
$ 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 # 修改仓库名
origin 为远程地址的别名。
- 【fetch】命令,从远程获取代码库。
$ git fetch //命令用于从远程获取代码库。
$ git merge //尝试合并到当前分支(紧随fetch之后)
- 【pull】命令,用于从远程获取代码并合并本地的版本
其实就是 git fetch 和 git merge FETCH_HEAD 的简写。
git pull <远程主机名> <远程分支名>:<本地分支名>
注:需要cd到对应项目clone后的文件夹内,才能pull
$ git pull origin master:master。
- 【push】命令,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 merge //合并分支
git branch //没有参数时,git branch 会列出你在本地的分支
git checkout -b (branchname) //创建新分支并立即切换到该分支下,从而在该分支中操作
git branch -d (branchname) //删除分支命令
git merge //将任何分支合并到当前分支中去