Git 使用小记
前言
以前也写过一篇关于 Git 日常命令,这里重新记录一遍。
添加多个仓库
添加多个仓库,可以通过不同的名称区分。
git remote add [名称] [仓库]
例子:
git remote add origin https://github.com/yourname/project.git
# 添加上游仓库
git remote add upstrem https://github.com/yourname/project2.git
完美修改提交
完美修改上次提交的代码,做一次更完美的commit,可以这样:
git reset commitId
,(注:不要带--hard
, 默认是--soft
)到上个版本git stash
,暂存修改git push --force
, 强制push
, 远程的最新的一次commit
被删除git stash pop
,释放暂存的修改,开始修改代码git add . -> git commit -m "massage" -> git push
简单总结一下,其实就是--soft
、--mixed
以及--hard
是三个恢复等级。
如果使用--soft
就仅仅将头指针恢复,已经add
的缓存以及工作空间的所有东西都不变。
如果使用--mixed
,就将头恢复掉,已经add
的缓存也会丢失掉,工作空间的代码什么的是不变的。
如果使用--hard
,那么一切就全都恢复了,头变,aad
的缓存消失,代码什么的也恢复到以前状态。
暂存功能
上面用到 git stash
命令,是用于暂存本地的修改,常用于切换分支时,保存当前本地改动。
# 将修改内容入栈
git stash
# 显示栈列表
git stash list
# 将栈中的 stash@{2} 取出
git stash apply stash@{2}
# 将最近入栈的取出
git stash pop
# 删除指定的栈
git stash drop stash@{0}
# 修改创建一个分支
git stash branch testchanges
强制拉取更新
# 放弃本地修改,强制拉取更新
git fetch --all
git reset --hard origin/master
git pull
# 指令是下载远程仓库最新内容,不做合并
git fetch
# 指令把HEAD指向master最新版本
git reset
更换仓库地址
git remote set-url origin gitURL
git remote rm origin
git push --set-upstream origin master
删除远程分支
git push [远程名] :[分支名]
重新修改日志
git commit --amend
git add 还原
# 这样文件退出暂存区,但是修改保留
git reset --mixed
git commit 还原
git reset --soft HEAD^
git reset --mixed
取消某次合并
git merge --abort #如果Git版本 >= 1.7.4
git reset --merge #如果Git版本 >= 1.6.1
打标签
git tag [标签名称]
git tag -a [标签名称] -m
git push origin --tags
查看全部分支
git branch -a
忽略对已入库文件的修改
# 忽略
git update-index --assume-unchanged FILENAME
# 恢复
git update-index --no-assume-unchanged FILENAME
添加多个远程仓库后,切换成主分支master
git remote add origin REMOTEGIT1
git remote add upstream REMOTEGIT2
git branch --set-branch-to=upstream/master master
更换远程仓库,解决本地跟远程的仓库,分支之间的链接关系
报错如下:
git remote add origin REMOTEGIT1
git remote rm origin
git remote add origin REMOTEGIT2
git branch --set-upstream master origin/master
git gc 垃圾回收
Git会收集所有松散对象并将它们存入 packfile,合并这些 packfile 进一个大的 packfile,然后将不被任何 commit 引用并且已存在一段时间 (数月) 的对象删除
给出提交ID,如何确定当前分支是否包含提交
git branch --contains <commit>
区分文件目录名大小写敏感
git config core.ignorecase false
自动或忽略换行符
#AutoCRLF#提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true #提交时转换为LF,检出时不转换
git config --global core.autocrlf input #提交检出均不转换
git config --global core.autocrlf false #SafeCRLF#拒绝提交包含混合换行符的文件
git config --global core.safecrlf true #允许提交包含混合换行符的文件
git config --global core.safecrlf false #提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
单分支合并多次提交纪录
// 记录不能已提交到远程仓库
// 合并最近的 4 次提交纪录,执行:
git rebase -i HEAD~4
主分支合并分支(变基)
// 创建切换到dev分支
git checkout -b dev
// 添加或修改readme.md文件,并提交到仓库
vi readme.md
git add readme.md
git commit -m 'readme.md'
// 多次修改完成后,准备提交到master
git rebase master
// 对比origin master多少次改动进行合并
git rebase -i origin/master
// 将里面的除了第一个 pick 全部改成 s
pick 提交记录一
s 提交记录二
s 提交记录三
// 如果有冲突需要解决冲突, add即可,不需要commit
// 然后,继续变基(当前还在临时分支上),直到所有冲突解决
// 变基成功后,自动回到当前变基分支
git add 冲突相关文件
git rebase --continue
// 切换到master分支,合并到dev分支,提交变基完成
git checkout master
git merge dev
// 查看提交日志
git log --oneline --graph
对比分支差异
// 具体代码差异列表
git diff branch1 branch2
// 只显示改动的文件列表
git diff branch1 branch2 --stat
分支合并时将所有提交记录汇总为一条
git merge --squash 分支名
git对已经提交过的文件添加到 .gitignore
// 同步线上
git pull
// 删除本地项目目录的缓存
git rm -r --cached .
// 重新添加
git add .
git commit -m "add .gitignore"
git push
未push前,回滚merge
查看merge操作的上一个提交记录的版本号,找到 (origin/master, origin/HEAD)
的commit id
git reflog
使用 reset 还原
git reset commitid
清除本地远程已删除分支
git fetch -p
后记
持续补充。。。