当前位置: 首页 > 工具软件 > Gerrit > 使用案例 >

gerrit

苏麒
2023-12-01

一  git和代码托管中心

代码托管中心的任务:维护远程库

局域网环境下:

  • gitlab服务器

外网环境

  • github
  • 码云

个人使用故事线

登陆github => fork操作 => pull命令 => 写代码 => add命令 =>  commit命令 => push命令 => pull request操作

团队协作故事线

团队写作项目 => 项目启动 => A开发者进入项目 => 团长接受A的PR => B开发者进入项目 => 团长接受B的PR => 分支管理 => 标签管理 => 查看历史

二  本地库操作

1. 本地库初始化

git init

2. 设置签名

形式:

  • 用户名
  • email地址

命令

  • 项目级别/仓库级别
    • git config user.name fanjinyu

    • git config user.email 18845648014@qq.com

  • 用户级别
    • git config --global user.name fanjinyu

    • git config --global user.email 18845648014@qq.com

  • 系统级别

  • 级别优先级:优先仓库级别

  • 查看配置:git config配置 - fireporsche - 博客园

    • cat .git/config

    • cat ~/.gitconfig,或

    • git config --local -l

    • git config --global -l

    • git config --system -l

    • git config -l

3.  查看状态

  • git status

4. 添加到暂存区

  • git add <file>

5.从暂存区移除

  • git rm --cached <file>

6.从暂存区提交到本地仓库

  • git commit
  • git commit -m “hello world”

7.查看历史记录

  • git log
  • git log --pretty=oneline
  • git log --oneline
  • git reflog

8. 版本前进后退

  • git reset --hard 索引值
  • reset命令3个参数对比
    • --soft
      • ·仅仅在本地库移动HEAD指针
    • --mixed
      • 在本地库移动HEAD指针
      • 重置暂存区
    • --hard
      • 在本地库移动HEAD指针
      • 重置暂存区
      • 重置工作区
  • git reset --hard HEAD
    • 用本地库HAED使暂存区和工作区和本地库保持一致

9. 查看帮助

  • git help 命令

10. 删除文件

  • 删除文件后,git add/rm <file>,git commit
  • 删除文件后恢复, git reset --hard 删除前指针(只要提交到本地库就能恢复

11. 比较文件差异

  • git diff 文件名
    • 将工作区的文件和暂存区的文件进行比较
  • git diff 本地库中历史版本指针 文件名
    • 将工作区的文件和历史版本文件进行比较
  • git diff
    • 将工作区的所有文件和暂存区的进行比较

二 远程库操作

1. 查看远程库

  • git remote
  • git remote -v

2. 创建远程库别名

  • git remote add origin https://github.com/fanjinyu1026/huanshan.git

3. push到远程仓库

  • git push origin master

4.从远程仓库clone

  • git clone 远程仓库地址
    • 完整的把远程库下载到本地
    • 创建origin远程地址别名
    • 初始化本地库

5.拉取

  • pull = fetch+merge
  • git fetch 远程库地址别名 远程分支名
  • git merge 远程库地址别名/远程分支名
  • git pull 远程库地址别名 远程分支名

6.解决冲突

  • 要点
    • 如果不是基于GitHub远程库的最新版所作的修改,不能推送,必须先拉取
    • 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可

7.fork:跨团队协作

  • 以需要fork人的身份进入要fork的仓库地址,点击fork
  • 本地修改,然后推送到远程
  • Pull Request
  • 被fork的人点击Pull Request,进行审查,没问题后,点击merge
  • 将远程库拉取到本地

8.ssh密钥

  • ssh-keygen -t rsa -C 邮箱地址
  • cat ~./ssh/id_rsa.pub,将内容拷贝
  • 右上角用户图标->Settings->SSH and GPG keys ->SSH Keys,将拷贝的内容粘进去 ->Add SSH Keys
  • git remote add origin_ssh git@github.com:atguigu2018ybuq/huashan.git

9. commit chanlog

Commit message 和 Change log 编写指南 - 阮一峰的网络日志

10. 打tag

  • git tag v0.0.1
  • git push origin --tags
  • 更新远程tag到本地
    • git fetch origin --prune
    • git fetch --tags
  • 挪动tag
    • git tag -d v1.0.1 
    • git tag v1.0.1
    • git push origin --tags -f

11. .gitignore文件

新建一个.gitignore文件,google搜索一下语言相关的gitignore,如c gitignore,可以把个github仓库里gitignore文件内容复制过来

本地也有类似功能,只对本地生效。./git/info/exclude

12. 

三  git学习资料

Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)

https://segmentfault.com/a/1190000023734704

四 遇到的具体问题

1)gitlab 发起merge request后,但还没有merge,发现代码有问题,怎么搞?

  • 修改代码
  • git add 修改的文件
  • git commit --amend --no-edit
  • git push origin basegw -f

注:

  • git commit --amend 会以新的改进后的提交来替换掉旧有的最后一次提交。只有一条commit记录,但commit id会变。
  • push的时候得加-f,要不可能会失败

 参考:gitlab - How to commit new changes to an open merge request? - Stack Overflow

2) git pull后有冲突

error: Your local changes to the following files would be overwritten by merge

方法一:

  • git stash save "save message"
    • 可以多次
    • 如果是新文件,需要git add 后,git stash -m 
  • git pull
  • git stash pop
    • 若有冲突,如:CONFLICT (add/add): Merge conflict in,解决冲突
      • <<<<<<< Updated upstream到=======之间的代码是你拉取的别人的代码
      • =======到>>>>>>> Stashed changes是你自己本次修改的代码
    • sdfds
  • git stash list    查看stash了哪些存储
  • git stash show    显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
  • git stash show -p    显示第一个存储的改动,如果想显示其他存存储,命令:git stash show  stash@{$num}  -p ,比如第二个:git stash show  stash@{1}  -p
  • git stash apply     应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} 
  • git stash drop stash@{$num}     丢弃stash@{$num}存储,从列表中删除这个存储
  • git stash clear    删除所有缓存的stash

另外,

常规 git stash 的一个限制是它会一下暂存所有的文件。有时,只备份某些文件更为方便,让另外一些与代码库保持一致。一个非常有用的技巧,用来备份部分文件:

  1. add 那些你不想备份的文件(例如: git add file1.js, file2.js)
  2. 调用 git stash –keep-index。只会备份那些没有被add的文件。
  3. 调用 git reset 取消已经add的文件的备份,继续自己的工作。

方法二

放弃本地修改,直接覆盖

  • git reset --hard ​​​​​​
  • git pull

3) git add撤销

撤销工作区修改(还未git add)

git checkout file_name

撤销单个文件的add(工作区不动)

git reset HEAD file_name

撤销所有文件的add(工作区不动)

git reset HEAD

参考

How to fix Git Error 'Your local changes to the following files will be overwritten by merge' - Appuals.com

4)下载子模块

git submodule update --init --recursive

5)撤回远程的提交

回滚到上一个commit,命令强制提交到远程仓库

  • git reset --hard head^    
  • git push origin master --force   

6)git快照的理解

https://segmentfault.com/q/1010000008914409

参考

Git - Book

 类似资料: