Git 使用小记

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,可以这样:

  1. git reset commitId,(注:不要带 --hard , 默认是 --soft)到上个版本
  2. git stash ,暂存修改
  3. git push --force , 强制 push, 远程的最新的一次 commit 被删除
  4. git stash pop ,释放暂存的修改,开始修改代码
  5. 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

更换远程仓库,解决本地跟远程的仓库,分支之间的链接关系

报错如下:
2019-11-06T07:25:20.png

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

2022-08-19T02:38:17.png

使用 reset 还原

git reset commitid

清除本地远程已删除分支

git fetch -p

后记

持续补充。。。

最后修改:2023 年 08 月 22 日 03 : 11 PM

发表评论