git

常用工具有svn,git      帮助用户实现版本控制的软件
本地协议1:
  /path/repo.git
本地协议2:
  file:///path/repo.git
http/https协议:
  。。。
ssh协议:
  user@git-server.com:path/repo.git

以git为例

常用命令
git init                                git初始化
git status                         查看当前文件夹的状态
git add    文件名                  对指定文件进行版本控制
git add .                         对指定文件夹下的所有文件及子目录进行版本控制
git commit -m "详细的描述信息"       提交版本库,并填写版本说明,以便以后会回滚
1、修改最近一次commit的消息  git commit --amend 在弹出的界面上修改消息
2、修改历史的commit消息  git rebase -i commitID1的父CommitID2 依靠detached HEAD;调整之后,commitID1及之后的CommitID都会发生改变  (还没有分配给其他人之前;否则他人会出现问题) 交互式
  - pick -> reword
  - wq!
  - 修改之后的消息
  - wq!
3、合并多个连续的commit(消息合并到一起) (之后的commitId也会变)
  ABC 合并BC
  - git rebase -i A
  - 把要合并的ID前 改为squash
  - wq!
  - 合并的原因 (保留之前的commit)
4、合并多个不连续的commit
  ABC 合并 AC
  - git rebase -i A
  改完之后的样子 ACB




git log                    查看版本记录 但不全
git reflog                  查看版本记录 全
注意:执行git commit 命令时,可能会提示进行用户和邮箱的配置,该配置用于记录当前版本由那个用户提交
git config --local user.name ''
git config --local user.email 'you@example.com'

 


stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;
stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。
git stash             将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
git stash list        查看“某个地方”存储的所有记录
git stash clear     清空“某个地方”
git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
git stash drop      编号,删除指定编号的记录

 

git branch 分支名称               创建分支
git checkout 分支名称              切换分支
git checkout -b a,b  [指定基于哪个分支创建]
创建a 和b分支,并切换到a分支

 


git branch -m 分支名称             创建并切换到指定分支
git branch                           查看所有分支    -av
git branch -d 分支名称             删除分支
git merge 分支名称                  将指定分支合并到当前分支 
1、创建一个分支bug,解决bug,处理完后,合并到master分支
2、删除bug分支
3、回到dev分支继续开发 

 

       无色  红色  绿色  无色

工作区,内容临时保存 (不提交到暂存区)

git stash    压栈操作
    
git stash list     查看

git stash pop   从栈中弹出修改的内容

git stash apply    将栈中的内容恢复到当前工作区;但是栈的内容 还会有。

 

工作区:当前开发程序所在目录称为工作区,即:工作开发都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,
如果程序中文件做任何操作(增、删、改),文件状态均会被检测到,可以使用 【git status】命令查看。
版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,
那么就是执行 【git add .】 将所有文件提交到暂存区,然后再执行【git commit -m '又一个版本'】提交到版本库的分支即可,
之后可以使用【git log】命令查看版本记录。

 

远程托管

 

1、先在github建立一个仓库

2、git remote add origin https://github.com/ls-2018/test.git
3、git push origin master        # 上传的是master分支的内容

4、git clone https://github.com/ls-2018/test.git        # 在另一台电脑,直接下载所有文件默认只有master分支
5、git remote add origin https://github.com/ls-2018/test.git
6、git branch dev     # 先创建dev分区,之后进行覆盖
7、git checkout dev    
8、git pull origin dev # 覆盖
1、git fetch origin dev  # 获取dev分支最新内容到版本的分支
2、git merge origin/dev  # 将版本库的分支内容合并到工作区    --allow-unrelated-histories
    git fetch origin tag V1.2

和第8条的效果一样
:::::本地代码和获取的最新代码,有重合部分
git pull +merge 查看提交记录的时候,可能会出现分叉现象
--------> git fetch + git rebase 会解决这个问题
面试题:
git rebase 的作用:保持提交记录的整洁

 

协同开发

 1、允许他人操作程序

    git 允许他人提交程序

  合作者模式

  组织模式   

 

 2、分支

  - master

  - dev

  - xdb

  - zhh

3、规则

  - 一起合并

  - 合并时间: 1/2

4、问题

  

  :我提交的时候,别人已经提交过了

 5、做代码  review

  如何做代码review?

    - 创建review分支

  谁来创建review分支:

    - 组长

    - 带你的人

 

    - 

 

 

 6、给其他人贡献力量

  点 fork, 改完以后传到自己的cangku,   pullrequest

 

 

 

 

其他

 不用反复的输入用户名密码

Https:
    https://用户名:密码@github.com/WuPeiqi/dbhot.git
    git remote add origin  https://用户名:密码@github.com/WuPeiqi/dbhot.git
                
SSH:
    git@github.com:WuPeiqi/dbhot.git
  # ssh-keygeon.exe

会生成id_rsa   id_rsa.pub 两个文件


 将id_rsa的内容加到

 

 

 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------

添加.git   忽略文件
vim    .gitignore  
.idea
.sql
以斜杠“/”开头表示目录;

以星号“*”通配多个字符;

以问号“?”通配单个字符

以方括号“[]”包含单个字符的匹配列表;

以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
    git tag -a v1.0 -m commit_id        本地创建Tag
    git show v1.0                       查看
    git tags -n                         查看本地Tag
    git tag -l 'v1.4.2.*'               查看本地Tag,模糊匹配
    git tag -d v1.0                     删除Tag
    git push origin :refs/tags/v0.2     更新远程tag
    git checkout v.10                   切换tag 
    git push origin  --tags
    git pull origin  --tags
    
    git clone -b v0.1   https://github.com/WuPeiqi/dbhot.git  克隆特定的版本

会自动生成,创建仓库的时候

 

 

cd /usr/local/src/
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 
wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
tar xf git-2.9.5.tar.gz
cd git-2.9.5
make prefix=/usr/local/git all
make prefix=/usr/local/git install
rm -rf /usr/bin/git
ln -s /usr/local/git/bin/git /usr/bin/git


git config --global user.name wendong
git config --global user.email wendong@163.com
git config --list

# 工作目录
# 暂存区域(index/stage/cached)    .git/index
# 本地仓库(repository)    .git
# 远程仓库(remote)

# 提交到本地仓库的代码会被记录
git add              [files]
git  rm             [files]        从暂存区移到工作区
git  rm -f             [files]        从暂存区、工作区 删除
git  rm --cache     [files]        从暂存区 删除

git  mv   [files]    [files]        修改工作区的内容,并同步到暂存区(前提已经提交到本地仓库)
git  diff    [files]                查看文件修改的内容            工作区与暂存区进行比较
git  diff --cached     [files]        暂存区与工作区相比
git diff HEAD HEAD~2  
git log   --all 所有的分支,默认只查看当前分支; --graph 图形化 git log
--oneline 只查看提交的内容, -n4 查看4条记录 git log --oneline --decorate git checkout -- [files] 从暂存区回复到工作区 git reset HEAD [files] 撤销提交到暂存区操作 git reset --hard [commit_id] 回退到哪一次commit git cat-file -p  commit_id  提交的一些信息
        -t          类型,commit还是tag还是tree、blob
tag|branch -> commit -> tree -> blob

 

 

 

github合并的策略

1、commit + merge

2、squash + merge     (线性;合并到master)

3、 rebase + merge      (线性;多次到master)

 

 

codereview

setting -> branches. ->  分支(添加规则 )  

 

 

posted @ 2018-09-16 20:38  慕沁  阅读(158)  评论(0)    收藏  举报