Git环境配置

一、 全局配置

1. 配置文件

git全局配置文件.gitconfig默认在当前系统用户文件夹下,window可运行%USERPROFILE%查找,Mac系统在cd ~查找。

具体配置可参考如下,其中:【user】: 用户提交时显示在log里的信息

【alias】: 常用git命令简写

【core】: window系统和类linux系统回车键转换

【push】: 默认对应远端(当本地分支名与远程分支名不一致有用)[user]

name = hoby

email = hoby@github.com

[alias]

st = status

co = checkout

br = branch

ci = commit

pl = pull --rebase

ps = push

mg = merge --no-ff

lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%Creset' --abbrev-commit

[core]

autocrlf = input

ignorecase = false

[push]

default = upstream

若要使用git mergetool功能,再增加配置(cmd处可修改成本地文件比较工具如beyond compare):[merge]

tool = sourcetree

[diff]

tool = sourcetree

[difftool "sourcetree"]

cmd = 'C:/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe' \"$LOCAL\" \"$REMOTE\"

[mergetool "sourcetree"]

cmd = 'C:/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe' -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

trustExitCode = true

2. 命令修改

如果不加--global 修改的是当前项目git配置。$ git config --global --list # 查看全局配置

$ git config --local --list # 查看本项目配置

$ git config --global user.name hoby # 修改提交名

$ git config --global alias.br branch # 修改简写

$ git config --global core.ignorecase false # 关闭忽略大小写

$ git config --unset alias.name # 默认删除当前项目配置,加--global删除全局

二、 Git密钥配置

1. 单项目自动化clone

如果想快速简单的clone一个git项目,在拉取时直接带上用户名+密码,此方法在服务器自动化构建时经常用到,具体实现如下:$ git clone http(s)://username:passwd@githbub.com/hoby/xxx.git需注意的是:此处username一般为用户名非整个邮箱地址,比如hoby@qq.com的用户,只需要用hoby即可,若一定需要完整邮箱地址可将邮箱中的@符号使用%40替换

2. 以SSH方式全局配置密钥

1.)检查SSH Key存在

如果存在id_rsa.pub 或 id_dsa.pub 文件,跳过此步。$ cd ~/.ssh # 查看用户根目录下.ssh文件夹

$ ls2.)创建SSH Key

创建ssh key时会提示自定名称和push时的密码(不是git登录密码),一般推荐略过,直接三个回车,如果创建成功会出来一个有图案的小框框。# 此email可任意,不一定要gitLab登录邮箱

$ ssh-keygen -t rsa -C "your_email@example.com"

3.)查看SSH Key

copy公钥内容到gitLab里,添加进去。$ cat ~/.ssh/id_rsa.pub

4.)测试SSH Key$ ssh -T "git@xxx.xxx.com"

5.)配置多个网站ssh密钥

在生成每个网站ssh-key时,自定义名称不要一样,然后在~/.ssh目录下新建一个config文件,然后配置多个网站的ssh信息,内容如下:# gitLab

Host dev.gitLab.com

HostName dev.gitLab.com

PreferredAuthentications publickey

IdentityFile ~/.ssh/id_rsa

# phabricator

Host 192.168.1.5

HostName 192.168.1.5

Port 22

PreferredAuthentications publickey

IdentityFile ~/.ssh/phabricator

3. HTTP(S)方式全局配置密码

http(s)创建的项目,操作时总是提示用户名和密码,不胜其烦,以下方案可以让Git永远记住用户名与密码:

1.)添加HOME变量

在Windows用户变量中添加一个HOME环境变量,值为%USERPROFILE%,如下图:

2.)创建_netrc文件

在"开始>运行"中打开%Home%,新建一个名为_netrc的文件,输入Git服务器名、用户名、密码保存,可放多个不同登录信息的Git项目,中间空一行即可,具体内容如下:machine dev.github.com

login hoby

password 123456

4. HTTP(S)方式的Git凭证存储

有时你在winodws/Mac下以http(s)方式clone项目时会发现,第一次输入的用户名和密码会被系统记住,后面不用再输入。这些是git通过credential helper(凭证小助手)帮你实现的, helper的类型有很多,具体可通过如下命令查看当前你的类型:$ git config --list | grep credentiala.) Mac系统:

git默认提供osxkeychain辅助程序来管理你的密码,具体可以通过Mac系统菜单页面“其他->钥匙串访问”功能查看

b.) Windows下凭证存储类型有四种:

git-credential-winstore、git-credential-manager(如果安装了Git GUI),git-credential-store(在.gitconfig配置store路径)和git-credential-cache(缓存在内存),例如,若Windows安装Git GUI后,通过上面的命令查看,默认会输出:credential.helper=managerwindows下git凭证存储位置:控制面板->用户账户->管理windows凭据,可去查看或修改

Git常用命令

一、仓库管理

1. 初始化

初始化后,目录下会生成.git隐藏文件夹,图标显示git可控,.git目录下有一个hooks,里面可以对预提交信息做一些规范和限制。$ git init

2. 添加/修改仓库地址

a.) 添加关联地址:$ git remote add origin http://dev.github.com:9800/root/front.git

b.) 修改关联地址:$ git remote set-url origin http://dev.github.com:9800/root/front.git

c.) 添加多个远程仓库:添加多个origin,本地可同时push到多个远程仓库$ git remote set-url --add origin http://dev.github.com:9800/root/front.git

d.) 切换http(s)/ssh方式:$ git remote rm origin

$ git remote add origin "git远程地址"

$ git push origin

3. 查看当前仓库地址$ git remote -v

4. 创建本地仓库$ git clone http://dev.github.com:9800/root/front.git

会在当前目录下自动生成front的仓库目录,如果自定义文件夹名,后面空格后加上名称

二、分支管理

1. 查看分支$ git br # 查看本地

$ git br -r # 查看远端

$ git br -a # 查看所有

2. 查看分支状态(推荐)

可全面查看本地分支状态,远端对应关系,落后/优先多少,最后一次提交信息及hash值$ git br -vv

3. 创建分支

a.) 创建本地分支:

本地分支名可不与远程一致,简单一点,方便Tab键补全,只要.gitconfig里的[push]项设置default = upstream即可,不然提交时,会提示本地与远程不一致$ git br # 创建分支,并关联远端

# 或:

$ git co -b # 创建分支并立即切换过去

b.) 创建远程分支:(本地分支推送到远端)$ git push origin -u # -u:创建远程分支并关联如果想自定义本地分支名(与远端名称不一致),可如下:$ git push origin -u :

4. 切换分支$ git co

# 切换到游离分支(不在任何分支)

$ git fetch

$ git co FETCH_HEAD

5. 合并分支

a.) 合并本地分支:$ git merge --no-ff # --no-ff:关闭Fast-Foward合并,这样可以生成merge提交,保留分支合并信息

会出来vim编辑窗口(可修改提交信息),不修改则按shift + : 再输入wq(保存退出)后回车即可。

b.) 合并远端本地(不用先checkout到本地):$ git fetch # 先更新远程仓库所有分支上最新commit-id到本地

$ git merge origin/ --no-ff # 再从远端merge,无需先拉取到本地

c.) 取消合并:$ git merge --abort

d.) 合并冲突处理:$ git mergetool # 如果在~/.gitconfig下正确配置了比较工具,会依次弹出比较窗口,处理后保存

$ git clean -nfd # 查看不在版本库中合并文件,以.org结尾

$ git clean -fd # 确认无误后,移除这个.org临时文件

$ git add -A

$ git merge --continue # 继续完成merge流程

6. 修改分支

a.) 修改分支名称:$ git br -m

b.) 修改当前分支远端关联:$ git br --set-upstream-to

c.) 修改指定分支远端关联:$ git br --set-upstream

7. 删除分支

a.) 删除本地分支:$ git br -d

b.) 强制删除本地分支:$ git br -D # 未被合并的分支被删除的时候需要强制

c.) 删除远端分支:$ git push origin --delete

# 或:

$ git push origin : # 推送一个空分支到远端,即删除

d.) 批量删除分支:# 删除本地

git br | grep | xargs git br -D

# 删除远程release

git br -r | grep -E 'release' | sed 's/origin\///g' | xargs -I {} git push origin :{}

8. 更新分支

从远端拉取最新的分支信息,更新本地缓存$ git fetch -p # 更新被删除的分支若更新时提示本地refs错误时,需要删除本地版本库上那些失效的远程追踪分支,命令如下:$ git remote prune origin

三、查看管理

1. 查看当前状态$ git st # 查看当前工作状态

2. 查看提交记录

a.) 查看全部提交记录:$ git lg

b.) 查看单个文件所有记录:$ git lg

c.) 查看单个文件修改详情:$ git lg -p # 可查看比较文件历史修改记录

d.) 查看单条记录详情:$ git show # 日志的hash值

e.) 查找所有包括指定字符串文件:$ git grep -n # -n:显示字符串所在的行数

3. 查看比较文件

a.) 查看比较文件:(与暂存区比较)

如果当前文件没被修改,需要查看历史修改情况,用上面的git lg -p fileName$ git diff # 比较当前文件和暂存区文件差异,应用在提交前确认的场景

b.) 比较两次提交记录:$ git diff # 比较两次提交之间的差异

4. 查看历史操作记录

每一次当前HEAD发生改变(包括切换branch, pull, 添加新commit)一个新的纪录就会被添加到reflog$ git reflog

四、操作管理

1. 更新

a.) 非快进更新:$ git pull --no-ff

b.) 基于rebase:这个命令会迫使git将远程分支上的变更同步到本地,然后将尚未推送的提交重新应用到这个最新版本,就好象它们刚刚发生一样,这样就可以避免合并以及随之而来的丑陋的合并信息$ git pull --rebase # 避免产生无用的合并信息若--rebase冲突了,先取消,改用git pull(不加--rebase参数),如下:git rebase --abort

git pull若--rebase冲突了,也可以先解决冲突,然后执行:$ git add -A # 强制添加到

$ git rebase --continue

c.) 临时更新:(暂存)$ git stash # 先放入暂存区

$ git pull

$ git stash pop # 恢复显示工作内容,或用git stash apply stash@{n}挑选恢复哪个

d.) 管理暂存:$ git stash list # 显示暂存列表

$ git stash clear # 清除暂存列表

2. 提交

a.) 多个修改,只提交部分:$ git add # 只添加要提交的到本地暂存区

$ git ci -m 'commit info' # -m处不加a

$ git push

b.) 提交全部:$ git add . # 有新文件时,一定要

$ git ci -am 'commit info'

$ git push

c.) 追加提交:(未push到远端)

将最近一次的变更追加到最新的提交,同时也可以编辑提交信息,不产生新的提交记录。$ git ci --amend # 如果已push到远端,不建议追加,容易跟自己冲突

$ git push

d.) 提交时绕过pre-commit验证:$ git ci -am 'commit info' --no-verify

3. 提取

从别的分支同步一个commit到本分支$ git cherry-pick # 单条

$ git cherry-pick .. # 多条,不包括prev-commit-id这条

# 提取一个merge提交

$ git cherry-pick -m # parent-number为主线序号,一般是第一个,也即是1

4. tag标记tag用来标记一个版本,用于日后的恢复# 查看所有tag

$ git tag

# 新增

$ git tag v1.0.0

# 删除

$ git tag -d v1.0.0 # 删除本地

$ git push origin :refs/tags/v1.0.0 # 删除远程

# 推送

$ git push --tags

五、恢复管理

1. 恢复本地

a.) 已修改,未暂存:# 恢复单个文件或目录

$ git co

# 恢复全部

$ git co .

b.) 已暂存,未提交:$ git reset HEAD^ # 向前回滚一条记录,相当于HEAD~1

$ git co .

c.) 恢复前N条:$ git reset HEAD~n # 默认省略--soft参数,属于软恢复,n>=1整数

d.) 硬恢复:$ git reset --hard HEAD~n| # 不保留当前修改,要当心,确认当前修改没有用了

2. 恢复远端

a.) 单次回滚:

git revert会产生一个新的与之前commit相反的操作,来抵消之前错误的提交。

1.) 回滚一个普通commit$ git revert # 也可以多次操作,达到恢复多个的目的

$ git push

2.) 回滚一个merge$ git show # 查看merge的commit-id,有一行显示:Merge: 96db08bb0 3669a27a5

# 核对一下以哪个为主线(主线的内容将会保留,而另一条分支的内容将被revert),若第一个为准,parent-number就是1

$ git revert -m

$ git push值的注意的是:如果刚才revert掉的内容,后面如果要再合并过来,需要在之前执行revert所在的分支上再执行一次revert,否则会造成那次的内容丢失(git记忆功能):

git revert

b.) 指定位置:$ git reset --hard # 恢复到当前位置

$ git push -f # 要加-f强制推送

c.) 挑选模式:$ git rebase -i # 会打开编辑,剔除挑选记录

$ git push -f # 要加-f强制推送

六、其它命令

1. 临时忽略文件

a.) 忽略跟踪:.gitignore只能忽略那些原来没有被跟踪的文件,如果文件已被纳入版本管理中,则修改.gitignore是无效的。$ git update-index --assume-unchanged

b.) 恢复跟踪:$ git update-index --no-assume-unchanged

c.) 查看被忽略的跟踪:$ git ls-files -v|grep '^h'

d.) 另一个类似的功能:# 忽略

$ git update-index --skip-worktree

# 恢复

$ git update-index --no-skip-worktree

2. 清理

a.) 移除版本控制:$ git rm --cached # -r:移除目录, --cached:保留本地的文件

b.) 清理工作树:$ git clean -fd # 移除未跟踪的文件和目录,如果加上-n参数来先看看会删掉哪些文件

c.) gitLab拉取代码:$ git clean -df && git reset --hard && git pull

d.) 垃圾回收:Git 往磁盘保存对象时默认使用的格式叫松散对象(loose object)格式,当手动执行git gc 命令,或推送至远程服务器时,Git会将这些对象打包至一个叫packfile的二进制文件以节省空间并提高效率。$ git gc --auto

$ git repack -d -l

3. 帮助$ git help

或查看某一条指令参数:git -n

七、常见问题

1、git密钥0644权限问题:linux服务器clone时报0644权限过大提示:WARNING: UNPROTECTED PRIVATE KEY FILE!# 修改权限

$ chmod 0600 id_rsa*

2、忽略主机公钥确认提示:自动化脚本第一次执行git clone时会提示主机公钥确认,解决如下:$ echo -e 'Host * \nStrictHostKeyChecking no' > ~/.ssh/config

3、清除提交记录,创建干净仓库:# 创建无提交记录新分支

$ git co --orphan latest_branch

# 提交信息

$ git add .

$ git ci -am 'xxx'

# 删除原分支,改名当前,并强推

$ git br -D master

$ git br -m master

$ git push -f origin master

git 配置origin_Git常规配置与用法相关推荐

  1. git config —global_Git多用户配置

    备注: 如下的操作,Windows系统建议在Git bash工具里操作. 如下操作的原理,建议查阅官方文档.Git - Reference 1.取消全局设置的用户信息. Git命令: $ git co ...

  2. mac git安装及github配置

    准备下载一个react的demo程序包,需要本地用到git.早就向配置了,那就安装配置一下吧. 首先,原来mac已经安装了git,版本 2.7 ,我用 brew又安装了一份git 版本 2.10.2. ...

  3. Exchange Server2013 系列九:常规配置

    Exchange Server2013 系列九:常规配置(一) 杜飞 经过前面的部署之后,我们的客户端访问角色和邮箱服务器角色都已经实现了高可用,但目前还不能正常使用,需要对服务器进行常规的配置,主要 ...

  4. [RHEL5企业级Linux服务攻略]--第6季 Vsftpd服务全攻略之常规配置

    1.vsftpd服务软件包 vsftpd-2.0.5-10.el5.i386.rpm:vsftpd主程序包 2.vsftpd相关文档 /etc/vsftpd/vsftpd.conf:vsftpd的核心 ...

  5. Git.之.最小化配置

    Git.之.最小化配置 做一个全局的用户配置,便于以后提交代码等,记录当前操作的用户. ## 添加配置 # git config [--local | --global | --system] use ...

  6. nginx的常规配置

    2019独角兽企业重金招聘Python工程师标准>>> nginx的常规配置 nginx的使用非常简单,只需要配置好我们需要的各种指令,就能跑起来.如果你需要添加模块,还需要添加模 ...

  7. Android开发之Git提交Template模板配置

    1.首先在桌面任意新建一个txt文件: 说明:git模板自己任意配置即可 然后将模板放入任意文件夹防止误删除: 然后使用git命令设置模板 右击桌面空白处打开git窗口: 输入命令: git conf ...

  8. IDEA中安装配置Jrebel热部署插件用法笔记

    今天给大家介绍一下IDEA中安装配置Jrebel热部署插件用法,希望对大家能有所帮助! 1.Jrebel插件介绍 JRebel属于一款JAVA虚拟机插件,它可以让你的项目在不需要进行重新编译的情况下, ...

  9. git推送指令配置_git 常用命令

    git 简介 在实际开发中,会使用git作为版本控制工具来完成团队协作.因此,对基本的git操作指令进行总结是十分有必要的,本文对一些术语或者理论基础,不重新码字,可以参考廖雪峰老师的博文,本文只对命 ...

最新文章

  1. java -version cmd_java如何运行步骤cmd?Java执行cmd命令方法有哪些?
  2. Layout动画:在android布局发生变化时添加动画效果
  3. 4.Hibernate O/R 映射
  4. 法国时隔20年再折桂!“网易云信:世界杯巅峰决战之夜”活动圆满结束!
  5. .NET获取不到js写的cookie解决方法
  6. Angular服务http post传递key-value 到Springmvc控制器
  7. 全国计算机等级考试题库二级C操作题100套(第01套)
  8. 前端UI框架《Angulr》入门
  9. win10下安装node
  10. 编译asp.net文件为dll文件
  11. 【云周刊】第128期:支撑千亿营收背后秘密——首届阿里巴巴研发效能嘉年华...
  12. Lubuntu16.4.3定制教程
  13. 1.MySql驱动的jar包下载
  14. delphi过时了吗?王者归来!从Pascal到Embarcadero Delphi 10.4.1的发展历史回顾
  15. Qt----Qt控制LED
  16. 自学软件测试怎么样,有前景吗?
  17. 【按键精灵】sub子程序、调用子程序
  18. 小米用户画像_小米10/10pro的目标用户画像是怎样的呢??
  19. 2023牛客寒假算法集训营3
  20. 高斯核——Python实现

热门文章

  1. multipartfile获取数据_MultipartFile实现文件上传
  2. 2022最新Android面试题目解答,Android MVP模式详解
  3. 巧说table的几种构造方式
  4. 【雅思】【绿宝书错词本】List1~12
  5. 一名优秀的销售人员应该具备哪些素质和能力?
  6. 实习期间总结遇到的Javascript常用函数
  7. html 鼠标经过出现文字,CSS实现鼠标滑过文字弹出一段说明文字无JS代码
  8. DISTINCT 多字段去重复
  9. NPOI 设置excel 边框
  10. 设计数据密集型应用之数据系统基础知识