git
基础教程
-
本地文件提交暂存删除
-
git add <file>
- 将本地修改添加到暂存区。可以使用
git add .
来添加所有,但不建议使用.
- 将本地修改添加到暂存区。可以使用
-
git checkout -- <file>
- 丢弃工作区file文件的改动,执行该操作后,无法找回
-
git reset HEAD <file>
- 将暂存区的文件撤回到工作区
-
git commit
- 将暂存区的文件提交到本地的版本库
-
git reset --soft HEAD^
- 将上一次提交撤回到暂存区。不加
--soft
直接删除
- 将上一次提交撤回到暂存区。不加
-
git stash
- 将工作区和暂存区的改动封存
-
git stash list
- 查看所有
stash
封存的改动和顺序
- 查看所有
-
git stash show stash@{num}
- 查看某次封存具体修改的文件
-
git stash pop
- 将修改由封存状态解封到工作区(不论之前封存时修改是工作区还是暂存区)
-
git stash pop --index
- 将修改由封存状态解封到封存前的状态(封存前在暂存区,解封后也在暂存区)
-
git stash drop stash@{num}
- 移除某次暂存
-
git stash clear
- 清楚暂存
-
分支相关操作
-
git branch
- 查看当前所在分支
-
git branch newImage
- 创建分支
-
git checkout newImage
- 切换分支
-
git checkout -b newImage
- 创建并切换分支
-
git merge Image
- 将
Image
分支合并到当前分支,并保存Image
上所有提交记录
- 将
-
git rebase Image
- 将
Image
分支合并到当前分支,不保存Image
上的提交记录
- 将
-
git branch -f Image1 Image2
- 将分支
Image1
移动到Image2
处,如果Image1
不存在,则创建Image1
- 将分支
-
git checkout Image~num
- 移动HEAD指针到
Image
的num
次父提交,Image
可以用HEAD
替换;~num
可以用^
,替换,一个^
相当于num=1
- 移动HEAD指针到
-
版本回退
-
git reset Image~num
- 将当前分支回退到
Image
的第num
次父提交,Image
可以使用HEAD
替换
- 将当前分支回退到
-
git revert HEAD~num
- 添加一次提交,该提交删掉
HEAD~num
次的修改(远程仓库)
- 添加一次提交,该提交删掉
-
整理提交记录
-
git cherry-pick Image1 Image2 ...
- 将
Image1
、Image2
…等按序合并到当前分支的后侧
- 将
-
git rebase Image1
- 将
Image1
合并到当前分支的后侧
- 将
-
git rebase -i HEAD~num
- 交互式
rebase
,效果比非交互式好用
- 交互式
-
其他
-
git diff
- 查看本次提交和上次提交区别
-
git log --oneline
- 显示提交记录
-
git log --graph
- 查看分支合并图
-
git reflog
- 获取执行过的命令
-
git status
- 查看当前工作区和暂存区的修改情况
-
git tag <tag_name> Image
- 将
Image
打上tag_name
标签,如果不写Image
,默认当前HEAD
指定的提交记录
- 将
-
git describe <ref>
ref
:可以识别为提交记录的引用。如果不指定ref
,则默认为当前HEAD
指定的提交记录。result
:<tag>_<numcommits>_g<hash>
tag
:离ref
最近的标签;numcommits
:这个ref
与tag
相差多少个提交;hash
:给定ref
表示的提交记录哈希值的前几位
-
线上操作相关
-
git clone url
- 克隆远程仓库
-
git remote add origin url
- 关联远程仓库
-
git fetch [origin] [place]
- 将远程分支更新到本地远程分支,place仅有一个分支时,表示将远程place分支对应的本次远程分支更新,但本地分支不更新;
place
有两个参数时,格式为source:dest,source
为本地分支,dest
为远程分支;如果本地分支不存在,则会创建,然后更新。如果省略source
,则创建dest
分支。
- 将远程分支更新到本地远程分支,place仅有一个分支时,表示将远程place分支对应的本次远程分支更新,但本地分支不更新;
-
git pull
- 先将远程分支的修改下载到本地,在将本地远程分支合并到当前开发分支。该命令相当于
git fetch
+git merge Image
;一般根据需求,使用使用git fetch
+git rebase
(相当于git pull --rebase
)或者git fetch
+git cherry-pick
替换
- 先将远程分支的修改下载到本地,在将本地远程分支合并到当前开发分支。该命令相当于
-
git push [origin] [place]
- 将本地修改推送到远程仓库。
origin
和plcae
一起使用,当place仅有一个分支时,表示将本地该分支推送到远程对应分支上,并更新本地对应的远程分支。place
有两个参数时,格式为source:dest,source
为本地分支,dest
为远程分支。如果省略dest
,则将本地source
分支推送到远程main
;如果省略source
,写法必须:dest
,表示删除远程dest
分支。 - 注意:source可以使用^和~
- 将本地修改推送到远程仓库。
-
git checkout -b Image origin/Image
- 创建本地
Image
分支并关联到远程Image
分支,该方法可以使用git branch -u origin/Image Image
替换
- 创建本地
-
常规
git
开发流程:- 使用
git fetch
将远程修改拉取到本地; - 查看本地和远程的修改是否存在冲突;
- 如果存在冲突,修改冲突,然后将远程修改合并到本地修改(看公司需求使用
git rebase
还是使用git merge
,前者合并是线性的,整个项目提交记录清晰;后者提交是非线性的,但会记录所有提交记录。) - 合并冲突后,使用
git push
将本地修改提交。
- 使用
-
常见问题解决方案:
- 需要在当前分支的前一个分支上做一些修改
- 使用
git rebase -i
将提交重新排序,将需要修改的提交记录挪到最前面;也可以使用git cherry-pick
处理这一步; - 使用
git commit --amend
进行一些小修改; - 使用
git rebase -i
将分支调回原来的顺序; - 将当前开发分支移到修改的最前端。
- 使用
- 本地开发已经执行
git commit
命令,但远程仓库中有同样的修改,无法执行git push
(未按照常规git
开发流程进行开发)- 使用
git stash
命令将本地修改保存;
- 使用
- 本地在
main
分支上开发,提交。执行git push
时被拒绝(远程main
分支被锁定)- 新建分支,用新分支进行提交,并申请
pull request
; - 将本地
main
分支reset
和远程仓库保持一致。
- 新建分支,用新分支进行提交,并申请
- 需要在当前分支的前一个分支上做一些修改
-
模拟多用户开发
- 分别将仓库拷贝到本地不同目录,在不同目录开发,然后上传到远程仓库。