git
分为本地仓库和远端仓库; 整个本地仓库的一个版本分为三个阶段:workspace 、index 、repository ,git commit 就是向repository 中添加了一个新的版本,然后reset的时候,--hard 、--mixed 、--soft 分别对应恢复到目标版本的那个阶段。 对于--soft ,多个版本之间直接reset,index会将中间版本进行合并。 数据状态的变化是修改操作导致的,不同版本之间存储的是修改的信息,通过这些修改的信息不断进行效果叠加最终成为了当前的状态; 使用git的时候,涉及到版本的,一般都需要先进行一次commit,然后再进行操作,如checkout、reset。
配置
- 设置当前仓库的用户名和用户邮箱
git config user.name "userName" git config user.email "email" - 设置全局的用户名和用户邮箱
git config --global user.name "userName" git config --global user.email "email" - 查看配置
git config -l – 对应仓库的config文件 git config --local -l – C:\Users\lisiw\.gitconfig
裸仓库(中心仓库)
使用–bare参数初始化的仓库,这种仓库并不包含工作区(内部没有代码)所以也就不存在在裸仓库上直接提交变更的情况,也不能在这个目录下执行一般的git命令。 一般情况下裸仓库是作为远端的中心仓库使用的。
初始化
git init --bare
远端仓库操作
操作关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sUFnZ8Yr-1659176467846)(./images/operator.png)]
clone
git clone 用户名@ip:/path/to
add restore
git add files 添加文件到暂存区。git restore -S files 取消暂存区中的文件git ls-files -c 查看暂存区中数据
commit reset
git commit files -m "commits" 将待提交信息提交到本地仓库。git reset hash 切换到指定版本
git reset --soft head~1 回退commit信息,不会恢复index级别git reset --mixed head~1 – 默认方式 回退commit和index信息,源码保留(不重置workspace)git reset --hard head~1 全部回退,源码也会恢复到指定版本。~ 和^ 都是表示前面的版本: head~ / head^ 当前head前一个版本 head~2 / head^2 当前head前2个版本
远端和本地
push
将本地版本推送到远端,在推送之前如果远端版本发生了改变(其他本地进行了push),那么需要使用pull来先拉取一下,如果有冲突的话需要进行处理,处理完毕后在commit一个本地版本,再进行push。
git push origin master
origin -- 要push的位置
master -- 分支
push提交到远端之前先git pull origin master 一下,此时会根据远端代码标注当前代码的冲突区域,人工查看远端和当前代码有什么不同,处理冲突之后,使用git add . ,git commit -m "merged" 提交新的版本。
pull
将远端版本拉取到本地,如果有冲突会进行标注。
log
git log --oneline --graph git log可以显示所有提交过的版本信息,不包括已经被删除的 commit 记录和 reset 的操作
- commit
是个SHA1计算出来的哈希值,就是用于描述对应的提交版本。 - HEAD
当前最新提交的指针 - master
所处分支
git reflog [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wBtDdRc0-1659176467850)(./images/reflog.png)] 对应版本后面的命令是导致切换到对应版本的指令,就是说执行对应指令后切换到对应版本的。 git reflog是显示所有的操作记录,包括提交,回退的操作。一般用来找出操作记录中的版本号,进行回退。 git reflog常用于恢复本地的错误操作。
branch
git branch 可以查看分支
整理版本
-
git commit -amend 用于将当前的index 数据commit 到repository 中:适用的场景就是说如果版本进行了一些修改,然后将这些修改add到了index中,此时如果想要保存一个版本,一种方法就是commit一次,如果不希望多出来一个版本,那么就可以使用这个指令将index修改的信息commit到当前最近一次的本地仓库版本中。 git commit --amend # 进入交互模式修改
git commit --amend -m 'new commit message' # 直接修改上一次 commit
注意:
- 这是用一个新的 commit 来替换掉原来的 commit,所以 commit ID 会发生变化。
- 不要修改已经 push 的 commit,除非你是在自己的分支
-
git rebase -i 整体就像是个脚本,根据不同指令处理不同版本;不同版本之间存储的是修改的信息; 用于本地仓库不同版本的整理,可以合并选中的提交范围;注意:rebase之后,如果内部有p指令,那么会将当前版本指向该commit,因此,一般使用该指令的时候会将end-commit设置为当前版本: commit4
commit3
commit2
commit1
git rebase -i commit1~ commit3
使用交互式rebase可以细致的操作每一条commit,这样就可以合并修改commit: # 多次commit
# (start-commit, end-commit] 前开后闭区间,默认 end-commit 为当前 HEAD
git rebase -i [start-commit] [end-commit] -- commit^ 前一个版本 commit~后一个版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMsRWGWP-1659176467851)(./images/rebase.png)] commands :
p, pick = use commit # 保留这个 commit,并将当前版本选择这个版本
r, reword = use commit, but edit the commit message # 修改 message message
e, edit = use commit, but stop for amending # 停下来,修改内容,修改完毕后先`add commit`,然后`git rebase --continue`
s, squash = use commit, but meld into previous commit # 合并对应版本到上一个版本
f, fixup = like "squash", but discard this commit's log message # 合并且抛弃 message
d, drop = remove commit # 抛弃这个 commit
分支
查看分支
git branch -a – 查看远端和本地所有分支 git branch -l – 查看本地分支
创建分支
git branch branchName f5e86fbf455960c40e759c48bb0675b54d808611 可以从指定版本创建分支,没有指定的话就从当前最新的commit版本进行创建分支。
删除分支
git branch -d branchName
切换分支
git checkout branchName – 切换分支 git checkout -b branchName – 创建并切换分支,如果存在就失败
合并分支
git merge branchName 将branchName分支合并到当前分支,如果出现冲突,git会将出现冲突的文件都标注出来,然后需要手动处理这些冲突; 出现冲突手动处理完毕后就再commit一个版本,此时就认为已经merge完毕了对应的分支。
重命名分支
git branch -m oldName newName
忽略提交
在git目录下编辑.gitignore文件,该文件也需要进行git同步:
*.exe
检查忽略提交
查看.gitignore中那条规则忽略了fileName的git管理: git check-ignore -v fileName
checkout和reset
checkout和reset有区别: checkout是将head指针移动到分支的最新的commit版本(对应的workspace、index、read都指向该版本),reset是将对应分支直接指向对应的分支上。 另外checkout在进行分支切换的时候,如果发现文件在当前版本上进行了修改,那么checkout不会对该文件进行替换,而reset --hard会。测试发现有的时候会直接abort,总之,在进行版本操作的时候最好commit之后再进行处理。
error
push error
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCgV7mtZ-1659176467853)(./images/gitError1.png)] 这个异常就是别人进行了push,而本地仓库从远端仓库pull时的版本过期,因此需要先pull远端仓库,将远端的合并到本地的才可以进行push。
github
创建仓库
添加远程仓库 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OVL9yghR-1659176467854)(./images/githubaddrep.png)]
ssh
添加ssh的方法: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jm7jI6om-1659176467855)(./images/addssh.png)]
在github上创建一个仓库,然后
gitee
新建仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z8vkZWjb-1659176467856)(./images/giteenewrep.png)]
ssh
添加ssh的方法: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ixY7taov-1659176467858)(./images/giteeaddssh.png)]
|