git
git版本控制,管理
git的安装:
-
sudo apt install git
-
git version------>查看git的版本号
文件的四种状态
-
**Untracked:(工作区)**未跟踪,此文件在文件夹中,但并没有加入到git库中,不参与版本的控制,通过git add .---->Staged
-
unmodify :文件已经入库,未修改,此版本快照内容与文件夹完全一致,这种类型的文件有两种去处:
-
如果被修改,变为Modified
-
如果使用git rm移出版本库---->Untraced文件
-
-
**Modified:**文件已经修改,仅仅是修改
-
通过git add .----->暂存Staged状态(暂存区)
-
git checkout 则丢弃修改过的---->unmodify
- 这个git checkout即从库文件中取出文件,覆盖当前修改
-
-
**Staged:**暂存状态
- 执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件状态为Unmodify状态。执行git reset HEAD filename取消暂存,文件状态Modified
git的基本命令
初始化仓库

注意事项
第一次使用git命令提交代码之前,需要先设置用户名及邮箱,之后就不需要了
bash
//设置用户名的邮箱
git config --global user.email "邮箱"
//设置用户的名字
git config --global user.name "cjj"
查看仓库状态
bash
git status
//位于分支 master
提交版本到仓库
bash
git commit -m "create man.c"
查看提交的历史记录
bash
git log
查看对仓库的操作日志
-
查看本地分支、HEAD 等引用的移动历史
-
简单来说,他记录本地的仓库"去过哪里、改过哪个分支指针"
-
常用于找回误删提交、误reset、误rebase之后的代码
bash
git reflog
比较版本差异
使用git diff HEAD 比较当前内容与最后一次提交的版本的差异,如下在main.c中添加了一行内容,显示
添加的一行前面有'+'号标识。如果内容相同则该命令不显示输出结果。HEAD也可以省略默认就是与最近
一次比较。
bash
git diff HEAD
git checkout
-
切换分支/提交
-
切换到某个分支
bashgit checkout main //现在更推荐 git switch main -
新建并切换分支
bash/* git branch feature/login //创建新分支 git checkout feature/login //切换分支 */ git checkout -b feature/login //等价 git switch -c feature/login //switch--->切换分支 //c---->create(创建新分支) -
切换到某个提交
bashgit checkout <commit-hash> //<commit-hash>-->提交ID //就是每次 git commit之后生成的一串编号 git log --oneline -
进入detached HEAD ,你不在任何分支上 ,只是临时查看某个历史版本
-
正常情况下是
-
HEAD -> 分支名 ->提交
-
detached HEAD---->脱离了分支,直接指向某个提交
- HEAD -> 提交>
-
如果想基于这个提交继续开发,应该新建分支
bashgit switch -c recover-branch -
一步到位
bash//从提交B开始,创建一个新分支fix-from-old-version,并立刻切换到这个新分支 git switch -c fix-from-old-version B -
-
-
恢复文件
-
恢复到某个文件 到上次提交的状态
bashgit checkout -- app.js //现代推荐 git restore app.js -
某个提交恢复指定文件
md-end-block<span style="background-color:#f8f8f8"><span style="color:#000000">git</span> <span style="color:#000000">checkout</span> <span style="color:#981a1a"><</span><span style="color:#000000">commit</span><span style="color:#981a1a">-</span><span style="color:#000000">hash</span><span style="color:#981a1a">></span> <span style="color:#981a1a">--</span><span style="color:#000000">app</span>.<span style="color:#000000">js</span></span>
-
总结:
-
checkout---->全能
-
现代Git更推荐
-
switch---->管分支
-
restore---->管文件
-
暂存区撤销
bash
git reset HEAD main.c
//推荐写法
git restore --staged main.c
回退版本
-
git reset --hard HEAD^
-
把当前分支退回 到上一个commit ,并且丢掉工作区、暂存区的修改
bash
git status
git relog
git reset --hard HEAD^
-
git reset ---->移动当前分支的位置
-
--hard --------->非常彻底地重置
-
当前分支的指向
-
暂存区
-
工作区文件
-
-

git rm filename
-
删除一个文件(工作区),此时提交到暂存区(存的是删除记录),需要commit后才在版本库中删除
bash
//仓库的状态
git status
git rm main.c
git status
/*changes to be committed:
delete:mian.c
*/
-
结果:
-
工作区:main.c被删除
-
暂存区:记录main.c要被删除
-
下一次commit 会删除main.c
bashgit commit -m "delete main.c"
-
git分支操作命令
git branch
- 查看分支
git branch 分支名
- 创建分支
git checkout 分支名
-
切换分支
-
git switch 分支名
git checkout -b 分支名
- git switch -c 分支名
- 创建并切换分支名
git branch -d 分支名
-
删除分支
-
不能删除当前所处分支,切换到其他分支再删除
-

-
git merge 分支名
-
合并某个分支到当前分支
-
合并时可能产生冲突,需要解决冲突
-
有时需要禁止快速合并
- 目的:保留这个分支曾经被合并过的记录
-
git merge -no-ff -m '描述' 分支名
-
no fast-forward
-

-
git log --graph
- 以图表形式显示分支
git stash
- stash--->藏起来、暂存、储藏
-
用来临时保存 你当前还没有提交的修改,让当前工作区变干净,方便你切分支、拉代码、修bug
bash
git stash
git switch master
//做别的事
git switch feature/login
git stash pop
//恢复最近一次stash 并删除它
远程仓库操作
克隆项目
- git clone 项目地址
提交分支到远程仓库
- git push origin 分支名
提交分支到远程仓库,并跟踪分支
- git push -u origin 分支名
拉取远程服务器上的分支更新到本地
- git pull origin 分支名
gitee的使用
1.检查是否已经有SSH key
bash
ls ~/.ssh
//如果看到
id_ed25519
id_ed25519.pub
//或者
id_rsa
id_rsa.pub
//说明已经有key,直接跳到第3步
2.生成SSH key
bash
ssh-keygen -t ed25519 -C "你的邮箱"
3.复制公钥
bash
cat ~/.ssh/id_ed25519.pub
//复制一整端ssh-ed25519...
4.添加Gitee
打开:
操作:
点击:新增公钥粘贴内容 → 保存
5.测试SSH是否成功
bash
ssh -T git@gitee.com
第一次会问:
Are you sure you want to continue?
输入:
yes
成功会显示:
Hi xxx! You've successfully authenticated
6.进入项目目录
7.检查当前的远程仓库
bash
git remote -v
//如果看到 http://gitee.com/....git---------->还是HTTP
8.改为SSH(关键步骤)
-
"新项目第一次必须做的" ,只做一次
bash
git remote set-url origin git@.自己是的仓库地址
9.操作流程
-
第一次
bash
git init
git add .
git commit -m "initial commit"
创建空仓库,不要勾README
git remote add origin git@仓库地址(gitee.com:用户名/仓库名.git)
git push --set-upstream origin master
//git push //git push -u origin master
-
之后
md-end-blockgit add . git commit -m "版本更新提示" git push
