基本概念
git 是一个版本管理工具,可持久化,且支持多人合作
- 工作区: 当前的目录
- 暂存区: 数据暂时存放的区域
- 版本库: 存放所有已经提交到本地仓库的代码版本
工作区和暂存区都是独立于各个分支的
常用命令
全局设置
git config --global user.name xxx
:设置全局用户名,信息记录在~/.gitconfig
文件中git config --global user.email xxx@xxx.com
:设置全局邮箱地址,信息记录在~/.gitconfig
文件中git init
: 将当前目录配置成git
仓库,信息记录在隐藏的.git
文件夹中
查看文件
git diff XX
:查看XX文件相对于暂存区修改了哪些内容git add XX
:将XX文件的修改(修改可以是 增加,也可以是删除,或者改变具体文件的内容 )添加到暂存区
git add .
:将所有待加入暂存区的文件加入暂存git commit -m
“给自己看的备注信息” :将暂存区的内容提交,会形成一个新的版本,并增加到版本库中git status
:查看仓库状态git log
:查看当前分支的所有版本,从最开始的 empty 走到现在 head 指向的版本,可能会有多个版本,输入 q 退出
也可以使用git log --pretty=oneline
在一行显示所有版本git reflog
:查看HEAD指针的移动历史,也就是所有的版本(包括被回滚的版本)
log 与 reflog
的区别在于:log
显示从 empty 到 head 这条路径上的所有的版本, 而reflog
是显示 head 指针的移动历史,从哪一个节点到哪一个节点
eg:
目前我们有3个版本如下
其中 head 指向最新的版本 c然后我们回滚到上一个版本 b,二者的差异就显示出来了
删除/撤销
-
git rm --cached XX
:将 XX 文件从仓库索引目录中删掉,之后不再管理这个文件 -
git checkout -- XX
或git restore XX
:将 XX文件尚未加入暂存区的修改全部撤销(后悔药行为:写一个文件,写完了,还没 add 加入暂存区,后悔了,不想要了,可以用这个命令来进行内容撤销对文件的修改,如果暂存区为空,那就恢复到上一个版本对应的内容)
-
git restore --staged XX
将这个文件从暂存区中撤出来,但是还是会管理这个文件,并且不会修改文件的内容.
如下:
这样的话,二者组合可以实现对文件误删除的补救,具体如下:
代码回滚
将代码回滚到上一个或者某一个版本
git reset --hard HEAD^
或 git reset --hard HEAD~
:将代码库回滚到上一个版本,会将当前文件夹里所有的文件的状态修改到对应的历史版本.
git reset --hard HEAD^^
:往上回滚两次,以此类推git reset --hard HEAD~100
:往上回滚100个版本git reset --hard 版本号
:回滚到某一特定版本 版本号是前 7 位
云端
我们现在需要将本地存储的代码存储到云端
-
git remote add origin git@git.acwing.com:xxx/XXX.git
:将本地仓库关联到远程仓库,并在关联好后 (git@git.acwing.com:xxx/XXX.git
这一段在云端新建远程仓库后,会有提示) -
git push -u
(第一次需要-u
以后不需要):将当前分支推送到远程仓库
git push origin branch_name
:将本地的branch_name
分支 推送 到远程仓库 git push --set-upstream origin branch_name
:设置本地的branch_name
分支对应远程仓库的branch_name
分支 push 的时候,如果云端没有这个分支,那就创建这样一个分支. 一般在第一次上传分支的时候,会进行这个操作.
也可以将云端的仓库下载到本地
4. git clone git@git.acwing.com:xxx/XXX.git
:将远程仓库XXX下载到当前目录下
分支命令
开发的时候大家都是各自搞一个分支进行开发,然后开发完成后再合并到主分支 master
git checkout -b branch_name
:创建并切换到branch_name
这个分支上git branch
:查看所有分支和当前所处分支git checkout branch_name
:切换到branch_name
这个分支git merge branch_naitme
:将分支branch_name
合并到当前分支上
本地可以开分支,也可以对云端的分支进行一些操作
1. git push -d origin branch_name
:删除远程仓库的 branch_name
分支
2. git checkout -t origin/branch_name
将远程的branch_name
分支拉取到本地,这是因为clone 的话只会clone 主分支,可以用这个命令来进行其他分支的clone
3. git pull
:将远程仓库的当前分支与本地仓库的当前分支合并
git pull origin branch_name
:将远程仓库 的 branch_name
分支与本地仓库的当前分支合并
4. git branch --set-upstream-to=origin/branch_name1 branch_name2
:将远程的 branch_name1
分支与本地的 branch_name2
分支对应,为了避免混淆, 这两个名字最好相同
stash 栈空间
git stash
:将工作区和暂存区中尚未提交的修改存入栈中git stash apply
:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素git stash drop
:删除栈顶存储的修改git stash pop
:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素git stash list
:查看栈中所有元素