跳转至

git

安装

Mac

安装

https://www.git-scm.com/download/mac

下载安装

配置

git config --global user.name "matt"              # 你的名字
git config --global user.email "imattdu@gmail.com"     # 你的邮箱


# 配置git代理
git config --global http.proxy 'http://127.0.0.1:7890/' 
git config --global https.proxy 'http://127.0.0.1:7890/'

# 配置github代理
git config --global http.https://github.com.proxy 'http://127.0.0.1:7890/'

# 取消代理
git config --global --unset http.https://github.com.proxy 'http://127.0.0.1:7890/'

可以先安装brew

brew install git

将本地安装的git卸载

cd /usr/bin
sudo rm -rf git*

Windows

SSH登录

cd ~ # 进入家目录

rm -rvf .ssh # 删除.ssh 目录

ssh-keygen -t rsa -C matt17@qq.com # 运行命令生成.ssh 密钥目录
cd .ssh

cat id_rsa.pub

复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys

New SSH Key

输入复制的密钥信息

1.failed to push some refs to 'git@github.com:pavi-du/note.git'

问题:自己在远程仓库更改了内容,而本地不知道,直接提交

解决:

// git fetch+merge
git pull origin master 

命令

基本

// 第一下克隆下来
git clone https://github.com/imattdu/note.git
git remote -v
// 设置别名
git remote add origin https://github.com/imattdu/note.git
// 拉取
git pull origin

// git add --all
git add --all

git commit -m "xxxm"

// 推送
//git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master:master

分支

git branch // 查看本地分支

git branch -r // 查看远程分支

git branch -a // 查看本地分支和远程分支

git branch test // 创建test分支


git checkout test // 切换test分支

git merge test // 合并test分支

修改远程仓库地址

git remote rm origin

git remote add origin git@github.com:imattdu/studyhdfs.git


git remote set-url origin https://github.com/vuejs/vue.git

错误

由于第一次使用不是git clone 然后直接推送

git pull origin master --allow-unrelated-histories
// 合并俩个独立的仓库

IDEA如何第一次创建项目提交

首先在githup中创建项目

之后的俩步

这里记得和远程仓库的名字相同,如果远程是master,这里也得是master

之后可能会出现 Push rejected: Push to origin/master was rejected

我们输入以下内容即可

git pull origin master --allow-unrelated-histories
// master远程仓库分支名

紧接着add,commit,push即可

# IntelliJ project files
.idea
*.iml
out
gen

# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
# .gitignore
git config --global http.https://github.com.proxy https://127.0.0.1:XXXX
git config --global https.https://github.com.proxy https://127.0.0.1:XXXX

git config --global --unset http.proxy
git config --global --unset https.proxy


git config --global --unset http.https://github.com.proxy
git config --global --unset https.https://github.com.proxy


git config --global -l

git设置代理

git config --global http.proxy 'http://127.0.0.1:10809/' 
git config --global https.proxy 'http://127.0.0.1:10809/'

打开设置-》网络设置-》找代理-》端口号

git config --global --unset http.proxy
# github设置代理
git config --global http.https://github.com.proxy 'http://127.0.0.1:10809/'

# 取消代理
git config --global --unset http.https://github.com.proxy 'http://127.0.0.1:10809/'

查阅了一下资料,发现可以在pull命令后紧接着使用--allow-unrelated-history选项来解决问题(该选项可以合并两个独立启动仓库的历史)。

git stash #封存修改


$git pull origin master --allow-unrelated-histories

git stash pop #把修改还原
$ git push <远程主机名> <本地分支名>:<远程分支名>
也就是
$git push origin master:master
提交成功。

git stash:备份当前工作区内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前工作区内容保存到Git栈中 git pull:拉取服务器上当前分支代码 git stash pop:从Git栈中读取最近一次保存的内容,恢复工作区相关内容。同时,用户可能进行多次stash操作,需要保证后stash的最先被取到,所以用栈(先进后出)来管理;pop取栈顶的内容并恢复 git stash list:显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。 git stash clear:清空Git栈

git clone -b dev 远程仓库地址
// 默认拉取master分支
git clone xxxx
git fetch origin dev
git checkout -b dev origin/dev
git pull origin dev:dev

远程仓库创建-本地仓库创建

// 本地初始化
git init

git add --all
git commit -m ""

// 关联仓库
git remote add origin 远程仓库地址
git remote -v

git push origin master:master
//提示出错,使用下面命令合并即可
// 合并俩个独立的仓库
git pull origin master --allow-unrelated-histories
// 创建分支
git branch dev

//切换分支
git checkout dev

git branch -a

// 当前在master分支,合并devf
git merge dev

查看冲突文件

换行引发的发文

git config --global core.autocrlf false

https://cnbin.github.io/blog/2015/06/19/git-core-dot-autocrlf-pei-zhi-shuo-ming/

提示: git config pull.rebase false # 合并 提示: git config pull.rebase true # 变基 提示: git config pull.ff only # 仅快进

合并

分支并没有改变·1

变基:

分支也基于最新的基础改变了

// master分支执行b1的操作 基于他们最近的祖先
git rebase b1

// 提交已解决的事项
git add .
git rebase --continue


// 退出变基
git rebase --abort

// 不推荐

git stash pop --index 恢复最新的进度到工作区和暂存区

git stash save "xxx"



git stash list
git stash pop
git stash pop stash@{1}

git stash apply stash@{1}

git stash drop stash@{1}

git stash clear

工作区 add 暂存区 commit 分支

git reset --hard

--soft # 还原 HEAD
--mixed # 还原 HEAD、Index # 默认参数
--hard # 还原 HEAD、Index、Working Directory

忽略文件

符 号 说明
空格 不匹配任意文件,可作为分隔符,可用反斜杠转义
# 开头 标识注释,可以使用反斜杠进行转义
! 开头 标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
/ 结束 只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
/ 开始的模式 匹配项目跟目录
** 匹配多级目录,可在开始,中间,结束
? 通用匹配单个字符
[] 通用匹配单个字符列表
* 通用匹配多个字符

配置

换行符 autocrlf

换行

  • \r = CR = Carriage-Return = 回车
  • \n = LF = Line-Feed = 换行
  • \r\n = CRLF = Carriage-Return Line-Feed = 回车换行

Windows 下默认的文本换行符是 \r\n,Linux 下默认的换行符是 \n,Mac 下默认的换行符是 \r。

autocrlf 可选参数

  • true 表示在推送时转成 \n,在拉取时转成 \r\n。这样的设置让 Windows 的开发者能兼容很多的开发工具(比如早期的记事本,新的已经支持 \r\n 了),不至于遇到很多换行符问题。
  • false 表示在推送时和拉取时都原样保留换行符。这样的设置在所有程序员都在同一个平台开发时很有用,git 完全不处理换行符,全部改由开发者自行解决。
  • input 表示在推送时转成 \n,在拉取时原样保留换行符。注意到,这样的设置会让仓库里所有的换行符都变成 \n 不再有什么时候有 \r\n 了,所以对 Windows 平台的开发者并不友好。

具体配置

mac,linux设置为input

win10

如果项目均在win则设置为false

否则设置为true

[core]
    autocrlf = true
git rm -r --cached  log

常用命令

其他

删除已提交的文件

# 全部 -f强制删除
git rm -r --cached .


# 指定目录
git rm -r --cached .