工作区(Working Directory)
就是你在电脑里能看到的目录
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
![](https://img.haomeiwen.com/i18882195/dcfe41b9b4f8eec7.png)
![](https://img.haomeiwen.com/i18882195/4828256697e665e0.png)
![](https://img.haomeiwen.com/i18882195/eb60c92935a9734a.png)
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>或者git switch <name>
创建+切换分支:git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
git pull --rebase origin master
用于合并代码 然后再
git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
可以直接输入命令 :cat ~/.ssh/id_rsa.pub
1、git pull origin master --allow-unrelated-histories //把远程仓库和本地同步,消除差异
2、重新add和commit相应文件
3、git push origin master
4、此时就能够上传成功了
build.gradle: The option setting 'android.enableR8=false' is deprecated.
It will be removed in version 5.0 of the Android Gradle plugin.
You will no longer be able to disable R8
git提交代码
1 git add .
2 git commit -m "IssueID=00000000 描述"
3 git pull --rebase origin master
4 git push origin HEAD :refs/for/master 即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名, 第一个master是本地分支名,第二个master是远程分支名。
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名>
git pull rebase 的好处就是不用添加合并的节点 具体查看https://www.cnblogs.com/ellen-mylife/p/12794245.html
回退到上一个commit 先git log 查看上一次的id
然后git reset --hard commitid
git push origion master :refs/for/master
! [remote rejected] master -> master (prohibited by Gerrit)
1.解决
git push origion HEAD:refs/for/master
简单点说,就是refs/for/mybranch需要经过code review之后才可以提交;refs/heads/mybranch不需要code review。
如:
如果需要code review,直接push
$git push origin master
1
那么就会有“! [remote rejected] master -> master (prohibited by Gerrit)”的错误信息
而这样push就没有问题,
$git push origin HEAD:refs/for/mybranch
精简版查看log git log --pretty=oneline
查看到commitid 的时候 就可以跳到制定id的commit版本
在git 中HEAD指向当前版本就是你当前的提交 上一个版本就是 HEAD^ 多个就是HEAD~n
HEAD表示成一个指针 当你回退到某一个版本的时候 只不过是HEAD的指向变了
如果回退后还想再回去,当前窗口没有关闭的时候可以向上找commitid 然后继续git reset --hard commitid 就回去了
如果当前窗口关闭或者过去了一天 那么使用git reflog 来查看之前的操作 找到对应的commitid
git checkout -- readme.txt 可以丢弃工作区的修改
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
如果你把文件Git add 添加到stage缓存区了 那么想要撤回到工作区之前的 需要先git reset HEAD (file)
意思就是吧HEAD指针从stage缓存区指向工作区的文件 也就把文件从缓存区撤回了 最后在利用
git checkout --file 命令 撤回之前的操作 丢弃工作的文件
$ git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!
小结
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容
参考:
https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
网友评论