【git】git实操笔记

git指南

git常用命令

//do some modification
git diff
git checkout -f //This is used to throw away local changes

//do some modification
git status 
git add .  //添加changes
git status //可以看到changes to committed

git commit -a -s -m "some info messages about changes"
git show  //可以看到commit及用户签名
git log   //可以看到他人的commit

git remote -v //origin
git branch    //查看分支,例如,在master分支下
git push origin <本地分支>:<远程分支>

----
本地分支重命名
git branch -m old new(不是当前分支)
git branch -m new(是当前分支)

配置局部用户

在代码库git下生成局部用户的git config文件,commit时有user信息。注意不要跟别人用同一个user name来提交(全局用户)。

cd /src/github.com/repo
git config user.name "user"
git config user.email "user@email.com"
cat .git/config

git credential helper 免密配置

起因:每次编译需要从gitlab上拉包都要输入用户密码,很麻烦,用git credential可以保存用户密码

//删除 manager配置
git config --global --unset credential.helper manager/store
//添加manager配置
git config --global  credential.helper manager/store

代码提交规范

  • 格式type: description
    • 其中type是commit的类别,包括
      • fix - 修复bug
      • add - 新功能
      • update - 更新
      • style - 代码格式改变
      • test - 增加测试代码
      • revert - 撤销上一次commit
      • build - 构建工具改动
    • description是对本次提交的简短描述。
      • 不超过50个字符
      • 每行不能超过72个字符
      • 推荐以动词开头
  • 每个功能的实现作为一个commit
    • 例如,单元测试的每一个测试函数都是一个功能,为了便于review,可以每写一个函数就一个commit,防止代码量太大,增加review负担。
  • 每次commit的代码行数不要超过300行!10 lines - 10 bugs, 500 lines - looks fine!

push到远程仓库

  • 如果在本地的master分支修改,然后在远程仓库:git remote有一个origin,那push到远程仓库的时候,可以不push到master分支,而是push到远程仓库的新建分支。可以把本地的master分支,推到远程的mybranch分支。
git push origin master(本地分支):mybranch(远程分支)
  • 一般情况下最好是本地分支和远程分支重名,所以一开始pull的时候就checkout到一个新特性分支。通常情况下,一个分支对应一个新的特性。

  • 先rebase再push

    git pull --rebase origin master (把当前分支上所有的commit换成基于最新master分支的commit)
    git push origin 本地分支:远程分支
    

根据git log修改和抢救

git reset: 恢复到之前的commit(本地代码均未Push)

  • 状态恢复到之前的commit,但是现有的修改保留

    $git log
    ----
    commit aaaaa (newest)
    commit bbbbb
    commit ccccc
    
    $git reset ccccc
    
    $git log
    ---
    commit ccccc
    (然后git status可以看到aaaa和bbbbb的修改,unstaged)
    
  • 完全撤销,丢弃某一次commit之后的代码,恢复现场

    $git reset --hard ccccc
    

git rebase的各种作用

http://jartto.wang/2018/12/11/git-rebase/

  • case1:多次无用commit可以合并到一条commit。

    https://juejin.im/entry/5ae9706d51882567327809d0

    • 对于一个小功能,多次无用commit不利于代码review,且会造成分支污染,不利于回滚。
git rebase -i HEAD~4 //合并最近四次提交记录 ---进入vim编辑模式,有相关命令
//pick+s+s+s,确定好每条commit如何处理后,:wq推出,会自动进入commit message编辑的界面
//编辑commit message

git log //查看结果
  • case2:分支合并
    • 如果两个人在masterd的不同子分支上开发,然后最终要合并,直接merge会污染commit记录。可以先rebase再merge。
  • case3:在一个过时的分支上进行开发,先rebase比较好。
  • case4:修改某一次commit的内容

但是git rebase是一个危险命令,因为改变了历史,要谨慎使用。

只要分支上需要rebase的所有commits历史都没有被push过,就可以安全使用rebase。

pull解决冲突

  • push前,可以先pull,注意pull和pull --rebase的区别
git pull --rebase origin master //把在当前分支上的所有修改rebase到orgin:master分支。
  • 冲突解决
    • 在IDE中可以直接选择,也可以手动修改。
    • head====上半部是我的commit,下半部是pull到的修改。酌情选择。可以直接accept incoming change。
    • 解决完了,要git add一下。再git rebase --continue。

修改某一次commit的内容

  • 起因:用VScode导致有很多trailing space,别人无法用Patch来合并。要删除某一个commit中的这些无用空格。
  • 修复:
    • (git stash)
    • git rebase -i(–interactive) [需要修改的commit的前一条的commit号]
    • 对于需要修改的commit,把pick改成 edit
    • 修改文件
    • git add
    • git commit --amend
    • git rebase --continue
    • (git stash pop)

强制push到远程分支【高危操作】

  • 起因:之前没有rebase,直接push到了B分支。希望rebase后再push到B分支上(覆盖)。(远程仓库的分支只可以更新,不可以覆盖,除非force push)

    local:
    git pull --rebase origin master
    //xxxx冲突,解决冲突....
    git add xxxx
    git rebase --continue
    //ok
    git push [-f] origin 本地分支:远程分支
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值