Git 常用操作
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 拉取远程分支方法
直接获取
git clone -b dev 代码仓库地址 (dev是分支名称) git clone --b [tags标签] [git地址] (拉取tag代码)
现有仓库建立关联
打开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^的意思是上一个版本,也可以写成HEAD12
如果你进行了2次commit,想都撤回,可以使用HEAD
至于这几个参数:
–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 文件大小写处理
用git执行下列命令,设置本地git环境识别大小写。
git config core.ignorecase false
修改文件夹名称;
运行下面命令删除原来缓存的文件夹;
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分支
- 查看 dev 提交版本号记录
git log dev
- 切换到待合并分支 test
git checkout test
- 执行合并
git cherry-pick commitID
- 然后推到远程
git push
补充:
- 如果想一次合并B、C两个提交,如下:
git cherry-pick A B
- 我想合并从B到D的所有提交
git cherry-pick B…D
注意:
上面提交B要早于D,不然不会成功,而且不会包含提交B,也就是只有C、D两次提交,如果要包含B提交,则要如下:
git cherry-pick B^..D