文本(工作区) -> 草稿(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的区别

  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  3. 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的提交,这一撤销动作会作为一个新的修改存储起来,这样,当你和服务器同步时,就不会产生什么副作用。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐