初始化git
git config --global user.name xxx
:设置全局用户名,信息记录在~/.gitconfig文件中git config --global user.email xxx@xxx.com
:设置全局邮箱地址,信息记录在~/.gitconfig文件中git init
:先创建一个目录,进入这个目录文件,将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中
三区的概念
- 工作区:仓库的目录,也就是当前目录文件下,所有修改操作均在这里进行。工作区是独立于各个分支的,也就是所有分支共享同一个工作区。
- 暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区,当对工作区的修改进行git add操作后,修改的文件放入暂存区。暂存区是独立于各个分支的,也就是所有分支共享同一个暂存区。
- 版本库:存放所有已经提交到本地仓库的代码版本,也就是将暂存区的文件commit后的地方。
本地操作
在本地目录下的文件进行开发
git add file_name
:将工作区的XX文件添加到暂存区
git add .
:将工作区的所有文件添加至暂存区
git commit -m "info"
:将暂存区的内容提交到当前分支
状态操作
git status
:查看分支状态
git diff file_name
:查看file_name文件相对于暂存区做了哪些修改
日志操作
git log
:查看当前分支的所有版本
git log --pretty=oneline
:单行查看当前分支的所有版本
git reflog
:查看HEAD指针的移动历史(包括回滚的版本)
git reflog --pretty=oneline
:单行查看HEAD指针的移动历史
git reset --hard HEAD^
或者git reset --hard HEAD~
:将代码库回滚到上一个版本
git reset --hard HEAD^^
:往上回滚两次,以此类推
git reset --hard HEAD~100
:往上回滚100个版本
git reset --hard
版本号:回滚到某一特定版本
恢复操作
当在工作区编写的代码很烂时,将工作区的修改恢复到暂存区的内容或者撤销工作区的修改时:
git restore <filename>
强行将暂存区的修改拉回到工作区:当觉得暂存区里的代码有错误时,需要拉回工作区进行修改时:
git restore --staged <filename>
分支操作
git branch branch_name
:创建branch_name分支
git checkout -b branch_name
:创建一个名为branch_name的分支,并跳转到此分支
git branch
:查看所有分支和当前所处分支
git checkout branch_name
:切换到branch_name分支
git merge branch_name
:将分支branch_name合并到当前分支
git checkout -d branch_name
:删除本地仓库的branch_name分支
本地与云端的操作
第一步
git remote add origin git@git.acwing.com:xxx/XXX.git
:将本地仓库关联到远程仓库
本地到云端 push操作
将本地分支推送到云端
如果你是独立开发(或者团队开发中只用到一个分支),一般只涉及一个分支,第一种方式后续操作会更简单
1、git push -u origin branch_name (或者 git push --set-upstream)
用途:将当前分支推送到远程仓库,并且设置本地branch_name分支与远程branch_name分支的关联(或者叫做建立本地分支对云端某个分支的追踪)。
解释:-u 是 –set-upstream 的简写。
在第一次推送本地分支时,使用 -u 会建立一个跟踪关系,这样在以后使用 git push 或 git pull 时,不需要指定远程仓库和分支名。如果独自开发,由于只有一个分支(当前的master分支),只需要输入git push -u。
2、git push origin branch_name
用途:将本地的指定分支推送到远程仓库,不会设置远程追踪。
解释:这个命令会把 branch_name 分支推送到远程origin仓库,但不会建立跟踪关系。即使你以后使用 git push 或 git pull,你仍然需要明确指定远程仓库和分支名。
3、git push -d origin branch_name:删除远程仓库的branch_name分支
云端到本地的pull操作
首先,默认情况下,从本地git pull的内容都是云端master(或main)分支的内容。所以在一开始,也就是pull之前,我们就要规避掉所有可能存在的风险:
- 在push阶段,就要建立本地与云端相同分支之间的关联;
- 在pull之前,执行下列操作:
git fetch:从远程仓库抓取(fetch)最新的改动(代码、提交记录等),但不会自动合并。执行此命令,可以先查看云端最新的代码,再决定要不要pull。
git pull:相当于git fetch+git merge,从远程仓库获取最新的代码并合并到当前分支。
如果本地dev分支未与云端dev分支建立关联
这样它并不会自动追踪 origin/dev,除非你手动设置。
这时候如果你执行:
git pull
git 会报错,像这样:
fatal: The current branch dev has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin dev
提醒你将本地分支与云端分支建立关联;或者执行git pull origin branch_name
,将远程仓库的branch_name
分支与本地仓库的当前分支合并
当你想对本地和云端的某个分支(可以不同名)建立关联,执行下面的命令:
git branch -u origin/branch_name1 branch_name2
:将远程的branch_name1分支与本地的branch_name2分支对应
栈
git stash
是 Git 里非常实用的一个命令,它的作用可以一句话概括:
“把你当前的修改先临时保存起来,让工作区回到干净状态。”
什么时候会用到 git stash?
比如你正在开发功能,但突然需要:
- 切换到其他分支修一个紧急 bug
- 拉代码、合并别人提交,但本地有改动冲突
- 暂时不想提交当前改动,但又不想丢掉它
这时候就可以用:
git stash
Git 会把你当前的 修改内容(工作区和暂存区)保存起来,然后让你工作区“看起来像刚刚 git checkout 完的一样”。
常用命令速查:
命令 | 作用 |
---|---|
git stash | 保存当前改动(默认名) |
git stash save | “备注说明” 保存时加上备注 |
git stash list | 查看所有 stash 的记录 |
git stash pop | 恢复最近的一次改动并移除它 |
git stash apply | 将栈顶存储的修改恢复到当前分支,但不删除栈顶元素 |
git stash drop | 删除栈顶的 stash |
git stash clear | 清除所有 stash |
注意:
git stash 不会保存 未追踪的文件(untracked)和 .gitignore 的内容,除非你用:
git stash -u 包括 untracked
git stash -a 所有内容,包括忽略文件
总结一句话:
git stash 就像 Git 里的“临时背包”,先把当前改动塞进去,等会儿再拿出来接着干!
总结
其实git操作并没这么复杂,只涉及到很简单的流程:
当你是开发一个新项目时
第一步
mkdir dir_name:本地创建目录文件
第二步
云端(GitLab或GitHub等)创建一个相同名字的project或repo
第三步
git remote add origin git@git.acwing.com:xxx/XXX.git:将本地仓库关联到远程仓库
第四步
本地目录中进行开发:
git push -u origin branch_name:建立本地分支与云端分支的关联
vim file_name
git add .
git commit -m "..."
git push
当你对已开发项目进行修改时
第一步
git checkout branch_name:跳到你的分支上(一般情况一开始就是在自己的分支上)
第二步
git pull:拉取代码最新进展
vim file_name
git add .
git commit -m "..."
git push