复习git的使用
最近公司的老旧项目要由svn转到git,git 命令大都忘记了,这里复习总结一下。
基础
查看本地git版本
git --version
查看本地git配置信息
git config --list
设置配置信息
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
提交文件
如果没有分支合并什么的操作的话,使用git提交一个文件的大概步骤:
1.查看状态
git status
2.将修改添加到暂存区
添加需要提交的修改。git add .
是全部添加,这个不建议直接使用
git add 文件目录 / git add .
3.提交到本地仓库
git commit -m "描述文本"
4.将本地仓库代码更新到最新
git pull
5.将本地修改推送到远程仓库
git push
注:提交之前先同步本地仓库;更新之后有冲突的话先修改冲突。
查看
查看最近几次的提交记录
git log
git reflog
git log --pretty=oneline
查看某个文件详细的提交记录
git log -p README.md
回退
git reset --hard commitId
注意使用前先将本地修改add 和 commit 都本地仓库,否则一回退,再回来,本地修改就没了。
git revert
特别注意:如果不熟悉尽量不要使用git revert 和 reset,使用前必须想好自己要做什么,是要撤销?删除?还是只是回退查看。
使用场景举例:
如果已经有A -> B -> C,想回到B:
方法一:reset到B,丢失C:
A -> B
如果 C 是提交错了,要删掉,可以使用reset命令回退之后再推送到远程。
方法二:revert提交一个反向回退,变成B:
A -> B -> C -> B
C还在,但是两个B是重复的
如果C就是修改,现在又要改回来,将来可能再改成C,那你就revert
如果不小心将密码啥的提交到远程了,要删除修改,如果此条修改是在第一条,那直接reset后重新push上去就行,如果不是在第一条,这样做的话会将这条之后的修改都丢失了?如果有一个指针直接到某条commit id,然后修改,提交到当前的commit上就更好了,我暂时不清楚有没有这样的功能。
撤销修改
git checkout -- readme.txt
有两种情况,一是还没添加到暂存区,撤销之后本地修改就没了;二是如果已添加到了暂存区,再撤销的话撤销修改就回到添加到暂存区后的状态。
注意:这里的“–” ,如果不加 “–” 的话就成了切换分支的命令。
或者使用 git restore
git restore readme.txt
工作区做了修改,并未添加到暂存区,想撤销工作区的修改,用 git restore即可。
如果工作区的修改已经add到了暂存区,需要将暂存区和工作区的修改都撤销
git restore --staged readme.txt
git restore readme.txt
从暂存区恢复工作区,
git restore --worktree readme.txt
从master恢复暂存区
git restore --staged readme.txt
分支
创建
git branch dev
//创建一个dev分支
git checkout dev
//切换到dev分支
git push origin dev
//将本地dev分支推送到远程
或
git checkout -b dev
// 创建dev分支并切换至dev分支
git push origin dev
//将本地dev分支推送到远程
git checkout -b dev
相当于 git branch dev
然后 git checkout dev
推送到远程后,远程就会有一个origin/dev的分支。
如果远程已有dev分支,则基于远程dev分支创建本地dev分支:
git checkout -b dev origin/dev
git branch -d dev
// 删除本地分支
git branch -D
// 强制删除分支
切换
git checkout 分支名 / git switch 分支名
建议使用 switch 命令,是最新的命令
tag
git tag v1.0
打本地tag
git push origin v1.0
将本地tag推到远程
git push origin --tags
将本地所有tag推至远程
git tag -d v1.0
删除本地tag,删除后要删除远程,也需要push origin
其他命令
显示当前目录
pwd + 回车
创建文件/文件夹
touch readme.txt
查看文件内容
cat 文件名
HEAD 指针 的理解
HEAD 指针指向当前的版本分支,所以在不同的版本之间切换,实际上是改变 HEAD 指针的指向,所以在不同版本之间切换会很快。