一、Git命令
1.Git添加和提交一个或多个文件
1.使用git config
命令的--global
参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
2.用dos命令,进入一个合适的位置
mkdir test 建一个git仓库的目录
cd test 进入目录
pwd 命令用于显示当前目录(注意:为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。)
通过git init 命令把这个目录变成Git可以管理的仓库, 进入test目录出现.git 目录(这目录是Git来跟踪管理版本库的,不要随意修改,会破坏Git仓库,如果你没有看到
.git
目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见。)
使用Windows的童鞋要特别注意:千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题。建议使用Notepad++记得把Notepad++的默认编码设置为UTF-8 without BOM。
3.在test目录下建一个hello.txt文件,内容为:
我今天吃了一个苹果。
把一个文件放到Git仓库需要两步:
第一步:用命令git add
告诉Git,把文件添加到仓库;
git add hello.txt
第二步:用命令git commit
,把文件提交到仓库:
git commit -m "这是本次提交的说明"
简单解释一下git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
为什么Git添加文件需要add
,commit
一共两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:
git add hello.txt
git add hello1.txt hello2.txt
git commit -m "这次添加了三个文件"
2.处理有改动的内容
修改一下hello.txt中的内容为:
今天我吃了两个梨。
运行git status命令;得知hello.txt被修改过了,但还没有准备提交的修改。
git diff命令:查看我们有改动的内容。
再用git add hello.txt 提交;然后用git status 查看当前仓库状态,然后git commit提交;
3.版本的管理
git log命令:版本控制系统肯定有某个命令可以告诉我们历史记录;
git log --pretty=oneline 是简化信息
git reset --hard HEAD^ 是回到上个版本,HEAD是指当前,HEAD^指上一个,HEAD^^指上上个,当前往上1000个可以写HEAD~1000
git reset --hard 版本号 就可以回到指定的版本(用于回到以前版本后,想要得到新版本)(版本号只需要写前几位就可以,尽量多几位,git会找到匹配的)
在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^
回退到add distributed
版本时,再想恢复到append GPL
,就必须找到append GPL
的commit id。Git提供了一个命令:
git reflog
用来记录你的每一次命令;
git checkout -- hello.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是hello.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是hello.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
git reset HEAD hello.txt可以把暂存区的修改撤销掉(unstage),重新放回工作区:
rm hello.txt 把文件删除了,用git status 就可以知道哪些文件被删除了
用命令git rm
删掉,并且git commit,是版本库中删除该文件;
git checkout -- hello.txt 恢复到最新版本
4.远程仓库
1.推送到远程仓库(GItHub官网)
第一步:由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,打开C盘->用户->用户名,看看有没有.ssh目录,再看看这个目录下有没有id_rsa和id_rsa.pub两个文件,如果没有
ssh-keygen -t rsa -C "youremail@example.com" 一路回车,id_rsa是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人
第二步:登陆GitHub,打开“settings”,“SSH and GPG Keys”页面:然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容,点击Add SSH Key。
第三步: git remote add origin git remote add git@github.com:github账户名/test.git
添加后,远程库的名字就是origin
,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程库。
第四步:git push -u origin master 把本地库的所有内容推送到远程库上,之后git push origin master推送最新修改。
2.从远程用clone命令,克隆到本地一个库:
git clone git@github.com:github用户名/gihub上的仓库名.git(我的仓库名是:github_test)
cd github_est 进入
ls 查看所有文件
实际还可以用这种地址:https://github.com/github用户名/github_test.git,Git支持多种协议,默认的git://
使用ssh,但也可以使用https
等其他协议
5.分支管理
1.创建于合并分支
git checkout -b dev 我们创建dev
分支,然后切换到dev
分支;git checkout命令加上-b
参数表示创建并切换,相当于以下两条命令:
git branck dev
git checkout dev
git branch 查看当前分支
git checkout master 就可以切换回master
分支(这个时候改动的内容,提交到dev分支上的内容,在master分支上就没有改过的内容)
git merge dev 把dev
分支的工作成果合并到master
分支上(就可以看到,和dev
分支的最新提交是完全一样的);
git branch -d dev 合并完成后,就可以放心地删除dev
分支了;
小结:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
git log --graph命令可以看到分支合并图
2.解决冲突
git checkout -b feature1 创建一个新的分支;(修改文本内容后,提交)
git checkout master 切换到master
分支;
在master
分支上把文件的最后一行添加一个内容,然后提交;
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看;
git merge feature1 (Git告诉我们,文件存在冲突,必须手动解决冲突后再提交,git status 也可以告诉我们冲突的文件,然后打开文件看看,会出现>>>><<<<=====)
Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容,我们修改后保存,然后提交;
git log --graph --pretty=oneline --addrev-commit 用带参数的git log
也可以看到分支的合并情况;
git branch -d feature1 删除feature1
分支;