eval "$(ssh-agent -s)"
ssh-add
git push --set-upstream origin dev |
在本地创建 分支 |
git push origin dev | 将本地创建的分支同步到库上 |
git add . |
提交代码 |
1. git中工作区,缓存区,本地库,远程库的简要区别
工作区,缓存区,本地库对应到实体,都是你从远程仓库克隆下来的那个项目目录!
工作区即你实际看到的目录和目录里的内容,当你修改/添加/删除了从远程仓库clone下来的目录中的文件后,工作区就变了
缓存区:使用git add . 操作可以将工作区的修改保存到缓冲区中
本地库:使用git commit -m "版本名" 可以将缓冲区中的更改保存到本地库中
远程库:即远程服务器上的那个项目目录,使用git push origin master 操作可以将本地库的修改保存到远程库中
2. git撤消、放弃本地的修改,本地库版本回退
2.1 还未使用 git add 缓存代码,即代码还在本地,可以用下面的命令回退修改
可以使用 git checkout -- filepathname (比如: git checkout -- readme.md ,不要忘记中间的 “--” ,不写就成了切换分支了!!)。放弃所有的文件修改可以使用 git checkout . 命令。
此命令用来放弃所有还没有加入到缓存区的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。
2.2 已经使用了 git add 缓存了代码,代码到了缓存区
可以使用 git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所有的缓存可以使用 git reset HEAD . 命令。
此命令用来清除 git 对于文件修改的缓存,相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(1)所示的状态。继续用(1)中的操作,就可以放弃本地的修改。
2.3已经用 git commit 提交了代码,代码到了本地库
可以使用git reset --hard 将本地库中的代码回退到指定的状态,有两种实现方式:
git reset --hard HEAD^,其中HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
git reset --hard commitid 回退到到具体的commitid,commitid可以通过 git log/git reflog命令来查看
以上的版本回退只是本地的,不会影响git库中的内容。
举栗:
使用 git reset --hard HEAD可以查看当前在哪个commitid上
使用git reset --hard HEAD^可以将本地代码回退到上个版本,也可以使用~计数,使用命令git reset --hard HEAD~1,回退后通过git status可以看到提示
Your branch is behind 'origin/RDB-42388-test-algorithm-4.0' by 1 commit
3.远程仓库的版本回退
3.1如果提交了一个错误的版本到本地,怎么回退本地版本?
参考2.3的内容
3.2如果提交了一个错误的版本到远程分支,怎么回退远程分支版本?
首先要回退本地分支:
git reflog
git reset --hard Obfafd
紧接着强制推送到远程分支:
git push -f
注意:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支
3.3如果提交了一个错误的版本到公共远程分支,又该怎么回退版本?
回滚公共远程分支和回滚自己的远程分支的区别:公共远程分支中含有别人的提交,回退公共远程分支可能会将别人的提交给冲掉。
具体操作可参考:https://www.cnblogs.com/qlqwjy/p/8179684.html
一些相关的知识点:
git checkout -b tony_backup //拉个分支tony_backup,可以用来保存当前代码
git revert 命令意思是撤销某次提交。它会产生一个新的提交,虽然代码回退了,但是版本依然是向前的,所以,当你用revert回退之后,所有人pull之后,他们的代码也自动的回退了。
git revert HEAD //撤销最近一次提交
git revert HEAD~1 //撤销上上次的提交,注意:数字从0开始
git revert 0ffaacc //撤销0ffaacc这次提交
要注意以下几点:
- revert 是撤销一次提交,所以后面的commit id是你需要回滚到的版本的前一次提交
- 使用revert HEAD是撤销最近的一次提交,如果你最近一次提交是用revert命令产生的,那么你再执行一次,就相当于撤销了上次的撤销操作,换句话说,你连续执行两次revert HEAD命令,就跟没执行是一样的
- 使用revert HEAD~1 表示撤销最近2次提交,这个数字是从0开始的,如果你之前撤销过产生了commi id,那么也会计算在内的。
- 如果使用 revert 撤销的不是最近一次提交,那么一定会有代码冲突,需要你合并代码,合并代码只需要把当前的代码全部去掉,保留之前版本的代码就可以了.
git revert 命令的好处就是不会丢掉别人的提交,即使你撤销后覆盖了别人的提交,他更新代码后,可以在本地用 reset 向前回滚,找到自己的代码,然后拉一下分支,再回来合并上去就可以找回被你覆盖的提交了。
4. git 对比两个分支的差异
参考:https://blog.csdn.net/u011240877/article/details/52586664
比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式:
目的 | 命令 | 其他 |
---|---|---|
1.1查看 dev 有,而 master 中没有的: 1.2查看 master 中有,而 dev 中没有的内容: |
git log dev ^master git log master ^dev |
感觉差别不大 |
2.1查看 dev 中比 master 中多提交了哪些内容: 2.2master 比 dev 多提交了什么: |
git log master..dev git log dev..master |
|
3.不知道谁提交的多谁提交的少,单纯想知道有什么不一样: | git log dev...master | |
4.在3的基础上,再显示出每个提交是在哪个分支上: | git log --left-right dev...master | 注意 commit 后面的箭头,根据我们在 –left-right dev…master 的顺序,左箭头 < 表示是 dev 的,右箭头 > 表示是 master的。 |