win快速截图 win+shift+s
.常用git命令
现在环境变量已经配置好了
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
git使用
1.登陆用户名
1.我们打开git的界面,输入
git --version查看版本
git config user.name 查看用户名
git config user.email 查看邮箱
2.修改用户名和邮箱地址
Git config --global user.name "username"
Git config --global user.email "email"
2.创建git本地仓库,并且添加一个文件
mkdir testgit
cd testgit
git init
Touch test.txt
git add test.txt
git commit -m"补充说明"
好了,现在查看一下仓库现在的状况
git status 查询仓库是否被修改了
git diff 查询仓库被修改的内容
3.版本回退
`commit f715a631f0d2d054cc413332987fff3c9ea14e23 (**HEAD ->** **master**)
Author: xxx <xxxxx1073@qq.com>
Date: Sat Mar 6 13:44:18 2021 +0800
add java
commit 897a9120356619a1c6dc3296294487090e82f72f
Author: xxx <xxxxx1073@qq.com>
Date: Sat Mar 6 13:40:34 2021 +0800
submit a changed submit
commit be5034a07f72d1453fa9e237a6107f598bfb64cb
Author: xxx <xxxxx1073@qq.com>
Date: Sat Mar 6 13:16:01 2021 +0800
pioneerrr submit a summary about git`
我们设定一个文件,它修改了三次(每一次修改都commit),
1.git log 查看版本数量
我们可以看到有三个版本
2.使用git reset 回退某一个版本
注意:HEAD指向的是当前的版本
'git reset --hard HEAD1(回退一个版本一个,如果数字太大了,HEAD-num) 回到过去
3.我们想进入特定的某一个版本,怎么做?
git的文件经过每一次修改和提交过后都会有一个ID, 我们只需要查找你要的那个版本的id即可
git reflog 记录了你的每一次命令,用它来查一下ID回到未来吧
使用命令 git reset --hard commit_ID
注意:ID只要前几位就可以啦
4.工作区和暂存区
1 创建一个文件夹,git init初始化一个工作区。
2 创建工作区后,git会自动创建一个.git版本库,不过是 隐藏的
工作区是我们创建的文件
而版本库里面有stage暂存区和master分支,
git add文件就是被送到暂存区
git commit 文件就被送到了master分支,并且HEAD版本指针指向了master
注意:每commit一次,HEAD指针就指向那一个文件
5.修改
1 管理修改:
修改是啥:你添加或删除了一行,改了字符或创建文件
咋管: 所有的修改必须add到stage,然后 git commit一次性提交,不add就不算啦。
我们做一个错误的提交
第一次git add test.txt
git commit test.txt
我们第二次,修改了一下文件。git commit text.txt
不放暂存区了,就是那么任性。
结果git commit 只提交了在暂存区的 第一次的文件
注意:可以通过git diff HEAD – file 查看工作区和版本库里面最新版本的区别
小结:第一次修改 -> git add
-> 第二次修改 -> git add
-> git commit
2.撤销修改
这里有三种情况
小结
又到了小结时间。
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,git reset – commit_ID,不过前提是没有推送到远程库。
3.删除修改
我们假定现在有test.txt文件在工作区,并且已经添加到暂存区
场景1:我们打算删除,要把暂存区的也删除
git rm test.txt 删除
git commit 提交
场景2:我们已经添加到暂存区,但是误删了工作区的文件
git checkout -- test.txt
注意:
git checkout 其实是用版本库的版本替换工作区的版本,无论修改还是删除都可以还原。
如果文件从来没有被添加到版本库就被删除,是无法恢复的。
6.添加远程库
1.添加ssh秘钥
https://blog.csdn.net/wxrNine_/article/details/90756514?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
这里引用一下博客
2.从GitHub上克隆文件
git clone git@github.com:Github用户名/文件名.git
小结:git clone 网址也可以克隆,但是https协议可比ssh协议慢多了
7.分支管理
1.分支相关的命令
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
或者git switch <name>
创建+切换分支:git checkout -b <name>
或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
2.对于分支的理解
现在我们来实践一下
首先,我们创建dev
分支,然后切换到dev
分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用git branch
命令查看当前分支:
$ git branch
* dev
master
git branch
命令会列出所有分支,当前分支前面会标一个*
号。
然后,我们就可以在dev
分支上正常提交,比如对readme.txt
做个修改,加上一行:
Creating a new branch is quick.
然后提交:
$ git add readme.txt
$ git commit -m "branch test"
[dev b17d20e] branch test
1 file changed, 1 insertion(+)
现在,dev
分支的工作完成,我们就可以切换回master
分支:
$ git checkout master
Switched to branch 'master'
切换回master
分支后,再查看一个readme.txt
文件,刚才添加的内容不见了!因为那个提交是在dev
分支上,而master
分支此刻的提交点并没有变:
现在,我们把dev
分支的工作成果合并到master
分支上:
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git merge
命令用于合并指定分支到当前分支。合并后,再查看readme.txt
的内容,就可以看到,和dev
分支的最新提交是完全一样的。
注意到上面的Fast-forward
信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master
指向dev
的当前提交,所以合并速度非常快。
当然,也不是每次合并都能Fast-forward
,我们后面会讲其他方式的合并。
合并完成后,就可以放心地删除dev
分支了:
$ git branch -d dev
Deleted branch dev (was b17d20e).
删除后,查看branch
,就只剩下master
分支了:
$ git branch
* master
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master
分支上工作效果是一样的,但过程更安全。
总结:
1.HEAD是指向当前分支,master主分支是指向提交的。
2.我们可以从次分支切换到master主分支,
git switch branchname #切换分支
git merage branchname #将某分支回到当前分支