文章目录
1.将一个文件夹添加到本地git仓库
进入文件夹,执行:
git init
2.将文件或文件夹设置为被跟踪状态
即使当前文件夹已经在本地git仓库,但是其中的文件还处于未被跟踪的状态,执行以下命令来跟踪此文件或文件夹:
git add filename/dirname
将当前目录所有文件都设置为被跟踪:
git add .
3.将文件或文件夹取消被跟踪状态
从本地git仓库取消跟踪状态并在文件目录中删掉该文件:
git rm filename/dirname
- 如果文件已修改,需要加 -f
从本地git仓库取消跟踪状态但在文件目录中不删除:
git rm --cache filename/dirname
4.回退修改文件后的暂存状态
将本次修改但未commit的文件恢复到上次commit时的状态:
git reset HEAD filename/dirname
5.提交本次修改
将本次修改由暂存状态提交到本地仓库,执行:
git commit
进入编辑器,按i键,进入输入模式,可以输入此次提交的提交信息,然后esc,wq(类似vim操作),即可保存
更直接的方式,有相同效果,执行:
git commit -m '修改说明'
暂存并提交,一般需要git add之后再git commit,可以更快捷地执行:
git commit -a -m '修改说明'
6.git仓库中文件的四个状态
- 未跟踪
新建仓库时,目录里的文件都是暂存状态
新创建的文件和文件夹,也是暂存状态
执行git add命令,可以将未跟踪
状态的文件/文件夹修改为暂存
状态- 未修改
修改文件,状态由未修改
状态变为已修改
- 已修改
回退文件,执行git add命令,状态由已修改
变为暂存
- 暂存
提交文件,执行git commit命令,状态由暂存
变为未修改
流程图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n5dwdZz8-1679136252102)(evernotecid://CF273F2A-DFE6-4438-B24E-1642BCBC2DAC/appyinxiangcom/39628498/ENResource/p115)]
7.回退本次提交
执行如下命令(注意,首次提交是不能回退的):
git reset head~ --soft
8.回退所有修改到上次提交
执行如下命令:
git reset --hard
9.查看文件的状态
执行如下命令:
git status
比如 从当前文件都处于未修改状态->修改某个文件->再次查看->提交->再次查看,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5JoY4kd2-1679136252103)(evernotecid://CF273F2A-DFE6-4438-B24E-1642BCBC2DAC/appyinxiangcom/39628498/ENResource/p117)]
10.修改文件后看修改内容
比如修改132.txt文件内容(不git add,否则看不到),然后执行
git diff
可以看到如下内容(按q退出):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tIbyeDdq-1679136252103)(evernotecid://CF273F2A-DFE6-4438-B24E-1642BCBC2DAC/appyinxiangcom/39628498/ENResource/p118)]
11.查看之前的提交历史
执行以下命令,查看之前的commit历史
git log
也可以使用以下命令来美化输出:
git log --pretty=oneline
执行后如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kbX3HgOd-1679136252103)(evernotecid://CF273F2A-DFE6-4438-B24E-1642BCBC2DAC/appyinxiangcom/39628498/ENResource/p119)]
12.远程仓库github使用
1.去github.com注册一个账号, 码云也行,步骤差不多
2.创建一个仓库,点右上角头像左边的+号,点击New repository
3.写个仓库名,点击最下方Create repository
按钮
4.然后会跳转到如下页面,告诉了我们如何把本地git仓库与远程仓库联系起来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hB8VhlLJ-1679136252103)(evernotecid://CF273F2A-DFE6-4438-B24E-1642BCBC2DAC/appyinxiangcom/39628498/ENResource/p120)]
13.修改远程仓库在本地的名字
git remote rename oldName newName
14.推送代码到远程仓库
git push 远程仓库名 分支
git push origin master
但是发现,需要输入github的用户名和密码,输入之后,有提示,未成功,原因是github不支持用户名密码鉴权了。鉴权未成功,有两种方式在github鉴权,一种是token,一种是ssh密码,token比较蛋疼,不说了,我们用ssh
步骤如下:
cd ~/.ssh
ssh-keygen -t ras -b 4096 -C “example@163.com(填你的邮箱)”
会提示起秘钥的名字,比如github,输入后回车
会提示输入密码,直接回车,生成秘钥成功
ls可以看到,生成了github和github.pub两个秘钥,分别为私钥和公钥
复制github.pub里面的内容
到github,头像点Settings
,左侧找到SSH AND GPG keys
点击,
粘贴进Key
文本框内,点击Add SSH key
小功告成
- 注意,应该使用ssh://…git,而不是https
15.分支概念
不同分支的作用不同,下面是一个经典的分支模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mky0avEm-1679136252104)(evernotecid://CF273F2A-DFE6-4438-B24E-1642BCBC2DAC/appyinxiangcom/39628498/ENResource/p121)]
16.创建分支
git branch newBranchName
17.切换分支
git checkout branchName
如果是从远程直接拉取分支,并切换到该分支,执行:
git fetch
+git checkout newBranchName
或
git checkout -b newBranchName origin/newBranchName
或
git checkout --track origin/newBranchName
如果遇到本地有暂存文件,无法从远程直接拉分支切换,先执行:
git reset --hard
18.查看分支路径
1.首先从master分支切换到feature1分支,修改提交一下
2.再从feature1切换到feature2分支,修改提交一下
3.然后git log可以看到,feature1上有个提交,feature2上也有个提交,(HEAD -> feautre2) 代表当前分支在feature2上
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ueUXcACE-1679136252104)(evernotecid://CF273F2A-DFE6-4438-B24E-1642BCBC2DAC/appyinxiangcom/39628498/ENResource/p122)]
不过,这样看不太方便,我们使用下面的命令:
git log --all --graph
19.合并分支
比如我们想要把feature1分之合并到master分支
首先,切换到master分支:
git checkout master
然后,进行合并:
git merge feature1
通过git log --all,我们可以看到,feature1分支已经合并到master分支了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lX3WKasJ-1679136252104)(evernotecid://CF273F2A-DFE6-4438-B24E-1642BCBC2DAC/appyinxiangcom/39628498/ENResource/p123)]
20.临时储存
当前有暂存文件未commit时,是不允许切换分支的,可以使用临时储存,命令如下
git stash
这时候执行git status,发现没有暂存文件了,即没有需要提交的修改,可以切换其他分支了
在其他分支修改完,再切换回此分支,执行以下命令,把临时储存的内容取出来:
git stash apply
21.重置
git reset head
重置到上次提交
git reset head~
撤销一次提交,重置到上上次提交
git reset head~2
撤销两次提交,重置到上上上次提交, 数字代表撤销的提交次数
git reset head --soft
指重置到上次提交,但是git add把文件设置为暂存状态还是生效的,不加–soft,只是上次提交到目前执行的git add命令无效
git reset --hard
重置到上次提交状态,所有修改都回退
22.变基
git rebase
合并分支来讲,功能等同于merge
但是可以把多次提交合并为一次提交,让提交记录看起来好看,慎用,一般merge够了