当前位置:首页 > 零七八碎 > Git 常用操作

Git 常用操作

乐之-7个月前 (08-08)零七八碎243
[TOC]

Git 强制覆盖

git fetch --all && git reset --hard origin/master && git pull 

Git 账户相关

  • 查看
    git config user.name
    git config user.email
  • 修改
    git config --global user.name "Your_username"
    git config --global user.email "Your_email"

Git 修改远程仓库链接

git remote set-url origin 仓库地址

Git 设置分支默认推送远程地址

git branch –set-upstream-to=远端库/远端分支 修改的分支名

Git 查看分支默认推送远程分支

git branch -vv

Git 远程仓库的重命名与移除

git remote rename [旧] [新]
git remote remove [源名称]

Git 拉取远程分支方法

  1. 直接获取

    git clone -b dev 代码仓库地址 (dev是分支名称)
    git clone --b [tags标签] [git地址] (拉取tag代码)
  2. 现有仓库建立关联
    打开Git Bash
    在Git Bash 中输入 git init 进行初始化
    与远程代码仓库建立连接:git remote add origin 代码仓库地址
    将远程分支拉到本地:git fetch origin dev(dev即分支名)
    创建本地分支:git checkout -b LocalDev origin/dev (LocalDev 为本地分支名,dev为远程分支名)
    根据分支的变化,感觉这条指令可能是创建并切换到该分支
    最后一步将远程分支拉取到本地:git pull origin dev(dev为远程分支名)

Git 查看日志

git log [-p] // 查看提交历史 【-p 查看最近一次变动详情】
git show [log_id] // 查看上次提交变动记录或指定历史的变动

Git 分支操作

git checkout -b xxx // 新建并切换分支
git push origin login    // 将本地分支推送到远程
git branch -d xxx // 删除本地分支
git push origin -d[--delete] xxx // 删除远程分支

Git 迁移仓库

  • 随便找个文件夹,从原地址克隆一份裸版本库

    git clone --bare 旧的git地址 

    会在当前目录下产生一个 xxx.git 的文件夹
    这个步骤,就是克隆git每一次的提交信息
    和本地的代码没有关系,只要线上的代码是最新的,这个git版本就是完整的

  • 推送裸版本库到新的地址

    cd xxx.git
    git push --mirror 新的git地址
  • 删掉xxx.git文件夹
    删不删无所谓,只是说明它没有用了而已。

  • 代码迁移就成功了,接下来就可以使用新的地址了

    git clone 新的git地址

Git 推送拉去所有远程分支/标签,全部推送至新仓库

git clone xxx // 已经有代码的忽略
git branch -a // 查看所有分支
git tag // 查看标签
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done // 拉取所有远程分支到本地
git pull --all // 拉取所有分支及内容
git pull --tags // 拉取所有标签及内容
git remote remove origin // 删除原有仓库源
git remote add origin 新仓库地址   // 添加新仓库源
git push origin --all // 推送所有分支及内容到新仓库
git push origin --tags // 推送所有标签及内容到新仓库

Git 撤销操作

  • 写完代码后,我们一般这样

    git add . //添加所有文件
    git commit -m "本功能全部完成"
  • 执行完commit后,想撤回commit,怎么办?

    git reset --soft HEAD^

    这样就成功的撤销了你的commit
    注意,仅仅是撤回commit操作,您写的代码仍然保留。

  • 说明:
    HEAD^的意思是上一个版本,也可以写成HEAD1
    如果你进行了2次commit,想都撤回,可以使用HEAD
    2
    至于这几个参数:
    –mixed
    意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
    这个为默认参数,git reset –mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
    –soft
    不删除工作空间改动代码,撤销commit,不撤销git add .
    –hard
    删除工作空间改动代码,撤销commit,撤销git add .
    注意完成这个操作后,就恢复到了上一次的commit状态。
    顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:

    git commit --amend

    此时会进入默认vim编辑器,修改注释完毕后保存就好了。

Git 版本回退

  • 第一种(不推荐):通过reset的方式,把head指针指向之前的某次提交,reset之后,后面的版本就找不到了
    操作步骤如下:
    1、在gitlab上找到要恢复的版本号,如:
    139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96
    2、在客户端执行如下命令(执行前,先将本地代码切换到对应分支):
    git reset –hard 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96
    3、强制push到对应的远程分支(如提交到develop分支)
    git push -f -u origin develop

  • 第二种(推荐) 这种方式不会把版本往前回退,而是生成一个新的版本。所以,你只需要让别人更新一下代码就可以了,你之前操作的提交记录也会被保留下来
    操作步骤如下:
    1、找到你误提交之前的版本号
    2、git revert -n 版本号
    3、git commit -m xxxx 提交
    4、git push 推送到远程

Git 远程已删除分支,本地依然显示

git remote prune origin

Git 文件大小写处理

  1. 用git执行下列命令,设置本地git环境识别大小写。

    git config core.ignorecase false

  2. 修改文件夹名称;

  3. 运行下面命令删除原来缓存的文件夹;

    git rm –cached 文件夹路径 -r

默认情况下 Windows 上的 Git 客户端,在文件名仅发生大小写改变时不会识别,提交后发现,Gitlab上的文件名不会发生变化。
解决方法: 编辑 .git 中的 config 文件, 将 ignorecase 改为 false 即可。

Git 合并某个分支的某次提交 (cherry-pick)

说明:
将某个分支的一个(或多个)提交合并到另一个分支,注意不是merge,merge是全部合并、而我们要的是可选择的,就要用到 Cherry pick
参数解释:
git cherry-pick [commit] 命令的常用配置项如下。
(1)-e 打开外部编辑器,编辑提交信息。
(2)-n 只更新工作区和暂存区,不产生新的提交。
(3)-x 在提交信息的末尾追加一行(cherry picked from commit …),方便以后查到这个提交是如何产生的。
(4)-s 在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。
(5)-m parent-number 1. 如果原始提交是一个合并节点,来自于两个分支的合并,那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动。 2. -m配置项告诉 Git,应该采用哪个分支的变动。它的参数parent-number是一个从1开始的整数,代表原始提交的父分支编号。
示例:
例如:有 test、dev 两个分支,dev有多次提交(按照提交顺序)[A、B、C、D、E],我想合并提交B到test分支

  1. 查看 dev 提交版本号记录
    git log dev
  2. 切换到待合并分支 test
    git checkout test
  3. 执行合并
    git cherry-pick commitID
  4. 然后推到远程
    git push

补充:

  1. 如果想一次合并B、C两个提交,如下:
    git cherry-pick A B
  2. 我想合并从B到D的所有提交
    git cherry-pick B…D

注意:
上面提交B要早于D,不然不会成功,而且不会包含提交B,也就是只有C、D两次提交,如果要包含B提交,则要如下:
git cherry-pick B^..D

参考文章

相关文章

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。