# git使用

# 关联git本地和远端仓库步骤

  1. 打开git,输入mkdir newProject 新建一个文件夹。

  2. git init 初始化本地文件夹为一个可以管理的git仓库。

  3. 关联本地仓库和远端仓库:git remote add origin http://${path}.git.

  4. 把文件放入本地仓库

    • git status          // 列出没有被git管理或者修改但还没有未被提交的文件
    • git add .          // 将未被管理的文件添加到git
    • git commit -am "提交文件"
  5. 把本地库推送到远端仓库

    • git push -u origin master
    • ps:当远端仓库使用Readme文件初始化项目,需要先git pull origin master,有固定格式时需手动编辑,按i修改,:wq退出
  6. 切换本地开发分支并管理远端分支

    • git checkout -b topic      // 创建并切换到topic新分支,相当于git branch topic 和git checkout topic 组合
    • git push origin topic:topic      // 关联本地topic分支和远端topic分支 (没有将自动创建topic分支并关联)

# git 常用命令

# 开发四部曲。

  1. git add .
  2. git commit -a "commit" / git commit -am "commit"
  3. git pull origin master
  4. git push origin master

# 代码冲突。

  1. 解决冲突
  2. git add .
  3. git rebase --continue (或者再次git commit)
  4. git push origin master

# git 分支管理

  1. git fetch (-p)              // branch在服务器上的最新状态
  2. git branch (-a)                // 查看所有branch
  3. git branch newBranch    // 本地创建branch
  4. git checkout branch        // 切换branch
  5. git checkout -b topic     // 创建并切换到topic新分支
  6. git push origin topic:topic      // 关联本地topic分支和远端topic分支
  7. git branch --set-upstream-to=origin/topic topic     //设置本地topic的上游及远端分支(设置之后git pull将默认从远端topic分支可拉取代码,git push将默认推送代码到远端topic分支)
  8. ......

# git版本管理

  • git reset --hard HEAD^          // 回退上一个版本
  • git reset --hard HEAD~3          // 回退上三个版本
  • git reset --hard 版本号          // 回退指定版本

# git远端版本回退

  1. git checkout target_branch            // 切换到需要回滚的分支
  2. git pull                                             //更新代码
  3. git branch target_branch_copy         //备份一下这个分支当前的情况
  4. git reset --hard target_commit_id    //把target_branch本地回滚到target_commit_id
  5. git push origin :target_branch          //删除远程 target_branch
  6. git push origin target_branch         //用回滚后的本地分支重新建立远程分支
  7. git push origin :target_branch_copy      //如果前面都成功了,删除这个备份分支

# git 大小写不敏感问题

  • 修改配置项

    • 项目根目录下,ll -a
    • cd .git/ 进入.git/文件下,ll -a
    • 修改config配置文件 vim config
    • ignorecase = false
    • :wq退出保存
    • 修改文件名,提交。
    • ps:多人协作时不建议使用,大小写不统一时更新会报错。建议提交后再把配置项修改为true。
  • 重命名

    • git mv oldName newName
    • git status
    • 可以看到rename的提示,此时正常提交即可。

# stash

stash 用于临时保存工作目录的改动。开发中可能会遇到代码写一半需要切分支打包的问题,如果这时候你不想 commit 的话,就可以使用该命令

//暂存你的工作目录
git stash 
//恢复工作目录
git stash pop

# rest

删除刚写的 commit,重新设置了 HEAD 和它指向的 branch

git  reset --hard HEAD^

# reflog

通过 git reflog 看到移动 HEAD 的哈希值 ,保存一段时间内的记录

//找回分支
git checkout 37d9aca
git checkout -b new

# rebase

Rebase 对比 merge,优势在于合并后的结果很清晰,只有一条线,劣势在于如果一旦出现冲突,解决冲突很麻烦, 主要的区别在于是否保留分支的 commit 提交节点,rebase 会给你一个简洁的线性历史树

git rebase master
git checkout master
// 用于将 `master` 上的 HEAD 移动到最新的 commit
git merge develop