acwing提供的代码托管平台:git.acwing.com(基于gitlab)
git是用一个树的结构来管理所有的历史版本。从树根节点开始,每个节点都代表代码的一个版本。每个节点都可以拓展出很多个分支。
git基本概念- 工作区:仓库的目录。工作区是独立于各个分支的
- 暂存区:数据暂时存放的区域。类似于工作区写入版本库之前的缓存区,暂存区是独立于各个分支的(无论怎么切换分支,暂存区都是一个)
- 版本库:存放所有已经提交到本地仓库的代码版本
- 版本结构:树结构,树中每个节点代表一个代码版本
若需要查看一个命令的帮助,可以加-h参数,比如
git push -h
命令
git init 将当前目录纳入git管理
git add
- git add . 将当前文件夹下所有文件的修改添加到暂存区
git commit -m "message" 将暂存区里的内容提交到版本库
git restore
-
如果想撤回暂存区中的内容,则使用
git restore --staged
git log 查看当前分支的所有历史版本(从初始分支走到当前分支)
- git log --pretty=oneline 将所有历史版本显示在一行
- git reflog:HEAD指针移动的历史路径(可以找到所有节点的编号)
git reset --hard HEAD^ 将代码库回滚到上一个版本
-
git reset --hard HEAD^^ 向上回滚两次
-
git reset --hard HEAD~100 向上回滚100次
-
git reset --hard 版本号 回滚到指定版本
本地创建一个git仓库后,和远程仓库关联起来
git remote add origin git@git.acwing.com:yogurtzzz/project.git
经过git add,git commit后,推送到远程服务器
git push -u origin master
第一次push时需要加-u参数,u for upstream,随后就不用加了
将云端的某个版本库拷贝到本地
git clone git@git.acwing.com:yogurtzzz/project.git
若本地的代码和云端的有区别,可以用git pull从云端拉取最新的代码
云端的分支和本地分支是独立的。
在云端新建分支
若本地新建的分支,云端没有对应分支,则在云端创建一个
git push --set-upstream origin dev3 # 或 git push -u origin dev3
或者使用更简短的命令
git push origin dev3:dev3 # 第一个是本地分支名, 第二个是远程分支名, 通常名字取一样的
在云端删除分支
删除本地分支后,想要将删除的分支推送到云端(将云端分支也删除)
git push origin --delete dev3 # 删除云端的dev3分支
或者
git push origin -d dev3
从云端拉取分支
git checkout -b dev7 origin/dev7 # 拉取云端的dev7, 并在本地建立分支dev7进行跟踪
设置本地分支跟踪的云端分支
git branch --set-upstream-to=origin/dev7 dev7
若云端分支在本地不存在,则需要更新一下
git remote update
若云端分支上有更新的内容,如何拉取到本地呢?
git pull # 拉取当前分支
git pull origin dev5 # 也可以将其他分支拉取并合并到当前分支分支
git branch 查看分支
git branch -a 查看全部分支(包括远程分支)
git branch -r 查看远程分支
git branch
git branch -d
git checkout -b
git merge
如果出现了冲突,则需要进行冲突处理。
假设新拉了一个分支dev,在第9行增加了内容999,并提交到版本库;随后重新切回master分支,在第9行增加内容888,并提交到版本库。
此时执行git merge dev,则会得到冲突的结果。
git status可以看到当前是存在冲突的。并会列出冲突的文件。
在冲突的位置,内容如下(用<<<<<<<,=======,>>>>>>>分隔)
<<<<<<< HEAD 888 ======= 999 >>>>>>> dev
888的部分是master修改的,999是dev分支修改的。
解决完冲突后,使用git add 和 git commit即可
其他git stash:将工作区和暂存区中尚未提交的修改,存入栈中
git stash apply:将栈顶存储的修改,恢复到当前分支,但不删除栈顶元素
git stash drop:删除栈顶存储的修改
git stash pop:将栈顶存储的修改,恢复到当前分支,同时删除栈顶元素
git stash list:查看栈中所有元素
git stash cclear:清除栈中的所有内容
git stash的应用场景:
1 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
2 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。
附:git可视化学习趣味网站:https://learngitbranching.js.org/



