git 使用记录

# git 使用记录


## 目录

> 一、 [git 安装](#.git安装)<br>

> 二、 [标签](#.标签)<br>

> 三、 [分支](#.分支)<br>

> 四、 [储蓄](#.储蓄)<br>

> 五、 [回退](#.回退)<br>

> 六、 [检测版本](#.检测版本)<br>

> 七、 [比较](#.比较)<br>

> 八、 [patch](#.patch)<br>

> 九、 [子模块](#.子模块)<br>

> 十、 [兼容功能的patch](#.兼容功能的patch)<br>

> 十一、 [patch的技巧](#十一.patch的技巧)<br>

> 十二、 [查看谁修改的](#十二.查看谁修改的)<br>

> 十三、 [git mergegit rebase区别](#十三、gitmergegitrebase区别)<br>

> 十四、 [git hot-fix](#十四.githot-fix)<br>

> 十五、 [解决冲突](#十五.解决冲突)<br>

> 十六、 [IDEgit使用](#IDEgit使用)<br>

> 十七、[在使用git时遇到的问题](#以下是在用git时遇到的问题)<br>


## .git安装


### 1. git下载


<https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git>


### 2. 创建工程


- gitlab或者github上创建一个工程


- 工程创建好后,会有快速设置步骤,如下所示:


<https://github.com/zcgithubgood/test>


### 3. 创建ssh key

ssh-keygen -t rsa -C "youremail@yourcompany.com"


### 4. .ssh/id_rsa.pub中内容拷贝到服务器上


### 5. 克隆一个本地库

git clone git@192.168.0.75:cell/switch2.git


### 6. 推送code


#### (1) git status 

                         

查看有变化的文件(一般有变化的文件会以红色显示出来)


#### (2) git add + 想要提交的文件名                 


#### (3) git commit -m "注释的一些信息"

如果在这一步出错的话:git reset --hard HEAD 回滚到add之前的状态


#### (4) git push    

完成这一步,你的文件就已近提交到了分支上,别人通过git pull 命令就可以把你提交的


参考:


<http://www.bootcss.com/p/git-guide/>



## .标签


### 1. 列出git中现有标签


- git tag


### 2. 有签名的标签

      

- git tag -a v2.0.0 -m "v2.0.0 test OK"


### 3. 删除标签


- git tag -d v2.0.0


### 4. 删除远端tag


- git push origin :refs/tags/v2.0.0


### 5. 查看提交历史信息


- git log --pretty=oneline


### 6. 同步


- git push -u origin master v2.0.0 --tags


### 7. 删除 


- git rm -r -n --cached file

- r:递归移除目录

- n:加上这个参数,查看服务器有没有对应的文件



## .分支


### 1. 查看分支


- git branch


### 2. 创建分支


- git branch name


### 3.切换分支


- git checkout name


### 4. 创建+切换分支


- git checkout -b name


### 5. 合并某分支到当前分支


- git merge name


### 6. 删除本地分支


- git branch -d na


### 7. 查看所有分支


- git branch -a


### 8. 同步分支


- git pull origin 分支名称


### 9. 测试步骤:


1. git branch smartboxzc

2. git checkout smartboxzc

3. git branch

4. git status

5. git add README.md

6. git add *

7. git commit -m 'init smartboxzc'

8. git push origin smartboxzc



### 10. 撤销对工作区修改


- git checkout -- 文件名称



## .储蓄


### 把当前工作现场“储藏”起来  


- git stash



## .回退


### 1. git reset --hard HEAD~3 


- 会将最新的3次提交全部重置,就像没有提交过一样


或者


- git reset —-hard 版本号


根据–soft –mixed –hard,会对working treeindexHEAD进行重置:


### 2. git reset –mixed


- 此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commitindex信息


### 3. git reset –soft


- 回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可


### 4. git reset –hard


- 彻底回退到某个版本,本地的源码也会变为上一个版本的内容



## .检测版本


### git log --pretty=oneline



## .比较


### 查看简单的diff结果


- git diff --stat



## .patch


### 1. commit


- git commit


在打开的文件中添加


```

Add module for testing compatibility of AWS S3 


This adds a new module to encapsulate AWS S3 related operations, the later patches 

will use it to add various tests against AWS S3 apis. 

```


#### commit中填写的内容描述:


- 第一行是 title


- 第二行是空行


- 从第三行开始写message



### 2. patch


- git format-patch HEAD^


从最近的一个log开始打一个patch


- git format-patch HEAD^^


从最近的两个版本开始打两个patch


- git format-patch HEAD~4 --subject-prefix "qs-test"


从最近的四个log开始打四个patch,工程名称如下,打开生成的patch,工程名字显示如下所示:

```

Subject: [qs-test v1 1/4] Modify a function's parameter of "key.send_file"

```


- 加个cover letter


git format-patch HEAD~5 --subject-prefix "qs-test" --cover-letter -o test_s3_patches


cover-letter:会生成一个test_s3_patches文件夹,并生成一个0000-cover-letter.patch     


### 3. 修改patch中的subject-prefix


这一步不修改也可以


```

Subject: [qs-xxx]Add tests for compatibility of AWS S3

Add tests for compatibility of AWS S3

```


### 4. 发送邮件


- git send-email 0001-qs-test-AWS-S3-API.patch --to youremail@yourcompany.com  --thread


0001-qs-test-AWS-S3-API.patch发送到youremail@yourcompany.com


- git send-email -1  --to youremail@yourcompany.com --thread


把最近的1patch发到youremail@yourcompany.com


- git send-email -6  --to youremail@yourcompany.com --thread


把最近的6patch发到youremail@yourcompany.com


### 5. 应用patch


- git am 0001-Fix1.patch



## .子模块


### 在项目里的rack子目录下获得一个 Rack 项目


git submodule add git://github.com/chneukirchen/rack.git rack


### 本地创建一个子模块


- 1. vim .gitmodule


```

[submodule "my-submodule"]


path = my-submodule


url = git@xxxxxxxx/my-submodule.git

```


- 2. git submodule init


- 3. git submodule update staging



### 下载的工程带有submodule


当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:


git submodule update --init --recursive



## .兼容功能的patch

应用到你本地工程的方法:


- 1) git stash 你本地的所有改动(如果没有,可跳过这步)


- 2) git reset HEAD~1 --hard


- 3) git pull 到最新的代码


- 4) git am 


- 5) git stash pop(如果没有进行第1步,可跳过此步)



## 十一. patch 的技巧


如果一个文件的改动要打成好几个 patch 怎么办:


- 1) 先把这个文件的所有变动 diff 出来


- 2) 人工把这个 diff 文件拆成几个 patch(不是 git patch,不需要有那些 commit log 信息)


- 3) 把文件 reset 到原始状态


- 4) patch file < 001.patch 命令,一个个打到文件上,打一个 commit 一条



## 十二.查看谁修改的


- git blame src/handlers/objects.py



## 十三.gitmergegitrebase区别


- git merge是用来合并两个分支的。


- git merge b  # b分支合并到当前分支


- git rebase b # 也是把 b分支合并到当前分支



## 十四.git hot-fix


<http://nvie.com/posts/a-successful-git-branching-model/>


只能merge --no--ff 需要发布的版本,这样比较容易看出多条线来。



## 十五.解决冲突


- 1. git merge


问题如下:


```

$ git merge dev-druid 

自动合并 src/handlers/buckets.py

自动合并 src/error.py

冲突(内容):合并冲突于 src/error.py

自动合并 src/constants.py

自动合并失败,修正冲突然后提交修正的结果。

```


- 2. 如果发生(1),git status


```

双方修改:   src/error.py

```


- 3. git log --graph命令可以看到分支合并图。


git log --graph --pretty=oneline --abbrev-commit


参考:


<http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000>



## IDEgit使用


### idea编写java或者pycharm编写python是常用的命令所用的按键如下所示


- VCS --> Commit Changes


- VCS --> Git --> Merge Changes


- VCS --> Git --> Reset HEAD


- VCS --> Git --> Pull


- VCS --> Git --> Push




## 以下是在用git时遇到的问题:


### 1. error: src refspec master does not match any.


#### 方法如下:


```

引起该错误的原因是,目录中没有文件,空目录是不能提交上去的

```


### 2. 如下内容


```

 fatal: 'origin' does not appear to be a git repository


 fatal: Could not read from remote repository.


 Please make sure you have the correct access rights


 and the repository exists.

```


#### 方法如下:


```

缺少 git remote add origin git@192.168.0.75:druid/switch2_network.git

```


### 3. error: src refspec master does not match any. error: failed to push some refs to 


#### 方法如下:


```

$ git add .


$ git commit -m "first commit"


$ git push -u origin master

```


### 4. git/rebase-apply still exists but mbox given


#### 方法如下:


```

在使用git-am之前, 你要首先git am –abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am

```


### 5. 补丁失败


```

补丁失败于 0001 Compatible with AWS S3 API


失败的补丁文件副本位于:


/home/druid/project/.git/rebase-apply/patch

```


#### 方法如下:



- 当您解决了此问题后,执行 "git am --continue"


- 如果您想跳过此补丁,则执行 "git am --skip"


- 要恢复原分支并停止打补丁,执行 "git am --abort"


```

$ git apply PATCH --reject


$ edit edit edit


(译注:根据.rej文件手动解决所有冲突)


$ git add FIXED_FILES


$ git am --resolved


eg:

    git apply 0001-Compatible-with-AWS-S3-API.v20160520.patch --reject

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值