Git基础
文本 -> 草稿 -> 仓库// 配置git$ git config --global user.name ‘masterzcw’$ git config --global user.email ‘275107947@qq.com’// 初始化git$ cd /vagrant/git$ git init$ touch demo1.txt// 添加到草稿$ git ad...
文本(工作区) -> 草稿(index) -> 仓库(head)
// 配置git
$ git config --global user.name 'masterzcw'
$ git config --global user.email '275107947@qq.com'
// 初始化git
$ cd /vagrant/git
$ git init
$ touch demo1.txt
// 添加到草稿
$ git add demo1.txt
// 提交到仓库
$ git commit -m '初始化'
// 查看status
$ git status
// 查看不同
$ git diff demo1.txt
文本被修改后, 还没有add之前的不同
// 从草稿恢复到文本
$ git checkout -- demo1.txt
当文本的更改还没有添加到缓冲区, 可以从缓冲区恢复上次add的内容
// 从仓库恢复到文本
$ git checkout head -- demo2.txt
// 从仓库恢复到草稿
$ git reset head demo1.txt
// 查看提交日志, 回退版本时可查询该日志
$ git log
// 查看命令日志, 回退版本与恢复版本时均可查询该日志
$ git reflog
// 撤销或恢复到指定版本, 从仓库到文本
$ git reset --hard HEAD^ #退回到上一个版本
$ git reset --hard 22ebc75 #退回到某版本
// 草稿和文本都被删除了
$ git rm demo2.txt
// 想要恢复要先从仓库恢复的草稿
$ git reset head demo1.txt
// 再从草稿恢复到文本
$ git checkout head -- demo2.txt
分支: 每一个分支就好像条时间线
发布: master分支是主分支, 一般用来做产品的发布, 发布的都是成熟的, 可以使用的版本
测试: 下面会有测试线, 用来做发布之前的测试.
团队: 再下来比如团队线, 一个组使用的分支
个人: 再就是个人, 个人可以分为general和bug, 正常开发和bug修改
// 创建分支
$ git branch dev
// 查看分支
$ git branch
// 切换分支
$ git checkout dev
// 合并分支
$ git merge dev
// 合并分支时出现冲突怎么办
命令会给出冲突的问题件, 手动解决
[masterzcw] /crr/www/git $ git checkout master
Switched to branch 'master'
[masterzcw] /crr/www/git $ git merge dev
Auto-merging demo2.txt
CONFLICT (content): Merge conflict in demo2.txt
Auto-merging demo1.txt
CONFLICT (content): Merge conflict in demo1.txt
Automatic merge failed; fix conflicts and then commit the result.
// 删除分支
$ git branch -d dev
github的使用
github的钥匙
// 本地对接github, 需要造一把钥匙
$ ssh-keygen -t rsa -C "275107947@qq.com"
$ cat /Users/masterzcw/.ssh/id_rsa.pub
// 复制公钥到github去创建一把钥匙, 创建了钥匙, 这台机器会被允许上传代码到这个用户
提交到github的命令行操作
$ cd /crr/centos7/blog
$ git init
$ git add .
$ git commit -m '第一次提交'
$ git remote add origin https://github.com/masterzcw/blog57.git
$ git push -u origin master
自建git服务器
安装git
sudo apt-get install git
或者
sudo yum install git
创建用户
sudo adduser git
收集秘钥
ssh-keygen -t rsa -C “275107947@qq.com”
初始化项目
git init --bare demo.git
git 远程分支版本回退
方法:
git reset --hard commit_id(可用 git log –oneline 查看) ###本地代码回退
git push origin HEAD --force ###远程提交回退
或者
git reset --hard HEAD~1
git push --force
git revert 和 git reset的区别
- git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
- 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
- git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
git reset + commit号
git reset命令后面是需要加2种参数的:”–hard”和”–soft”。这条命令默认情况下是”–soft”。执行上述命令时,这该条commit号之 后(时间作为参考点)的所有commit的修改都会退回到git缓冲区中。使用git status命令可以在缓冲区中看到这些修改。而如果加上”–hard”参数,则缓冲区中不会存储这些修改,git会直接丢弃这部分内容。但需要注意的一 个问题是:由于这样的重置是直接在本地的修改,无法提交到远程服务器,如果直接丢弃的内容已经被推到远程服务器上了,则会造成本地和服务器无法同步的问 题。即git reset –hard只能针对本地操作,不能针对远程服务器进行同样操作。如果从本地删掉的内容没有推到服务器上,则不会有副作用;如果被推到服务器,则下次本地和 服务器进行同步时,这部分删掉的内容仍然会回来。
而上面注意中提到的问题则可以很好的被git revert 命令解决。
git revert + commit 号
该命令撤销对某个commit的提交,这一撤销动作会作为一个新的修改存储起来,这样,当你和服务器同步时,就不会产生什么副作用。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)