前言
- 本篇是个人的git指令备忘录,会根据实际情况不断完善
常用指令
配置
-
显示当前git配置
git config --list
-
编辑git配置文件
git config -e [--global]
-
设置提交代码时的用户信息
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"
将某目录变为git可管理的仓库
git init
生成的.git文件夹用于跟踪管理版本,对此文件进行操作,可能会破坏git仓库
-
其他重要指令:
-
新建一个目录,将其初始化为Git代码库
git init [project-name]
-
将文件添加进版本库
-
git只能跟踪文本文件的改动(其他的亦是如此);对于图片、视频这类二进制文件git可以管理它们,但不可跟踪它们的变化
-
步骤:
-
将文件添加进暂存区
git add {filename};
-
将文件提交至仓库
git commit -m "rayTracingInOneWeekend.md instance"
其中""里的是提交的注释
-
检查是否还有未提交文件(验证是否提交)
git status
-
若此时修改文件内容,查看文件具体修改的内容
git diff {filename}
-
-
其他指令:
-
git commit [file1] [file2] ... -m [message] //提交暂存区的指定文件到仓库区
-
git commit -v //提交时显示所有diff信息
-
使用一次新的commit,替代上一次提交 。 如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend -m [message] //重做上一次commit,并包括指定文件的新变化
-
版本回退
-
查看修改文件的历史记录
我再进行一次 "git commit -m "rayTracingInOneWeekend.md instance"",然后查询历史记录
git log
其中,commit为版本号,Date下的就是每次提交的注释。可以看到有两个版本
-
当然可以对上面反应的内容进行缩减
git log --pretty=oneline
-
-
回退往前的版本
。两种方法:-
比较麻烦的
git reset --hard HEAD^
一次就HEAD^,两次就两个^,n次就n个^
-
查看当前版本的内容
cat {filename}
-
-
更加实用的
git reset --hard HEAD~{n}
其中,n表示想回溯的前n个版本
-
-
回溯到往后的版本
。步骤:-
获取想要回溯的版本号
git reflog
-
回溯
git reset --hard {版本号}
-
-
其他指令
- 恢复暂存区的指定文件到工作区
git checkout [file]
- 恢复某个commit的指定文件到暂存区和工作区
git checkout [commit] [file]
- 恢复暂存区的所有文件到工作区
git checkout .
- 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset [file]
- 重置暂存区与工作区,与上一次commit保持一致
git reset --hard
撤销修改、删除的文件
-
撤销
对文件进行的修改
。有如下三种方法:-
如果知道想要撤销的内容,可以手动修改,再"git add"添加进暂存区,最后commit
-
按版本回退的方法,回退至目标版本。"git reset --hard HEAD~{n}"
-
git checkout -- {filename}
意为把{filename}文件在暂存区做的修改全部撤销
其中,又分为两种情况:
- 目标文件修改后 但没有放入暂存区。使用"git checkout -- {filename}"将回到版本库的版本
- 目标文件已经放入暂存区,这时进行了修改。使用"git checkout -- {filename}"将回到添加暂存区时的状态
-
-
撤销删除
文件-
不彻底(相当于放入回收站)删除分支中的文件。两种方法:
-
手动删除
-
命令行删除
rm {filename}
可以看到并没有完全删除
-
-
彻底删除
git add {filename} git commit -m "delete {filename}"
-
恢复删除文件
git checkout -- {filename}
-
-
其他指令
-
删除工作区文件,并且将这次删除放入暂存区
git rm [file1] [file2] ...
-
停止追踪指定文件,但该文件会保留在工作区
git rm --cached [file]
-
commit恢复到某个旧版本
git reset --hard {版本号}
-
删除暂存区文件,工作区不改变
git rm --cached {filename}
-
远程仓库
-
本地git仓库 和 github仓库 通过SSH加密传输。我们先按以下步骤进行初始设置:
-
创建SSH Key。在用户目录下(我的是"C:\Users\Elysia")看看是否存在".ssh"文件夹且文件夹内是否有"id_rsa"(私钥)和"id_rsa.pub"(公钥)这两个文件,若存在忽略以下命令;不存在,则输入:
ssh-keygen -t rsa -C "{邮箱号}"
后面还需输如创建文件的路径(默认就好)和密码
成功后如图:
-
打开github -> 点击” settings” -> 点击左边的"SSH and GPG Keys" -> 点击"New SSH key" -> 填写"Title"(任意) 和 "Key"(来自 .ssh文件夹里的id_rsa.pub) -> "Add SSH key"
- 打开id_rsa.pub。在命令行中将路径切换至id_rsa.pub的路径,再使用命令行语句"more id_rsa.pub"
-
-
添加远程库
。我们在本地和github都创建了一个Git仓库,且希望这两个仓库进行远程同步。步骤:- 进入github,在右上角点击"+"找到"New repository"
- 填写"Repository name",再点击"Create repository"
- 根据上图中的提示和你的情况,输入命令行即可。其中 git push意为 把当前分支main推送至远程库,-u意为 把本地main分支和远程main分支进行关联。以后可以简化命令,只要本地进行了提交,即可用"git push origin master"直接推送
-
从
远程库克隆
。远程库如果更新了新内容,如何将其克隆到本地库?git clone {远程库网址}
-
其他命令
-
显示某个远程仓库的信息
git remote show [remote]
-
增加一个新的远程仓库,并命名
git remote add [shortname] [url]
-
上传本地指定分支到远程仓库
git push [remote] [branch]
-
显示所有远程仓库
git remote -v
-
下载远程仓库的所有变动
git fetch [remote]
-
删除指定远程仓库
git remote rm [remote]
-
创建&合并分支
-
创建并切换分支
git checkout -b {分支名称}
-
创建分支
git branch {分支名称}
-
切换分支
git checkout {分支名称}
-
查看分支(*为当前分支)
git branch
-
合并目标分支的内容到当前分支
git merge {分支名称}
-
删除分支
git branch -d {分支名称}
-
其他指令
-
列出所有远程分支
git branch -r
-
列出所有本地分支和远程分支
git branch -a
-
删除远程分支
git push origin --delete [branch-name]
-
解决冲突
- 现在有两个分支,两个分支都各自对同一目标文件进行了改动且"git add",若让其中一个分支融合另一个分支,此时便会产生冲突
- Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
- 解决冲突:
- 手动删除要合并的另一个分支多余的内容。即删除"=======" 和 ">>>>>>>"及它们之间的内容
- 手动删除目标分支多余的内容。即删除"<<<<<<<" 和 "=======" 及它们之间的内容
- 都保留。只删除"<<<<<<<" 、"======="、">>>>>>>"
- 再 "git add {冲突文件名}","git commit -m {注释}", "git push"
bug分支
-
假设我们在主分支master的一个分支ray工作,若主分支的另一个分支graphics出现bug,我们需要切换分支去修复它,但当前分支的内容并没有完成,该怎么办呢?
虽然我们可以commit提交,但这样会产生多余且不必要的记录
有更好的做法:我们可以使用命令"git stash"将工作推入Git栈中,如此一来便隐藏当前分支的工作。我们就可以放心去bug分支进行修复
-
查看隐藏的工作:
git stash list
-
但是如何把工作恢复呢?有两种方法:
-
栈中文件还在
git stash apply
栈中内容并没有删除,还需要使用命令:
git stash drop
一次删除一条
-
删除栈中文件
git stash pop
恢复的同时把栈中文件也删除
-
重要知识点
工作区&暂存区
- 工作区:git可管理的仓库
- 版本库:".git"属于版本库,不属于工作区。版本库里含有许多重要的内容,如stage(暂存区),自动创建的第一个分支master,指向master的指针HEAD
- 暂存区:使用git add添加进的区域便是暂存区。而git commit提交,是把暂存区内的所有内容提交至当前分支
分支策略
- 主分支非常稳定,主要用于发布新版,一般情况在其他分支进行分支,而非主分支。操作完后,需要发布,则将其他分支合并至主分支
个人所遇报错
-
报错:Another git process seems to be running in this repository, e.g.
另一个git似乎正在这个存储库中运行,当前这个情况是因为打开了编辑器。需要终止编辑器;如果它仍然失败,一个git进程可能已在此存储库中崩溃:手动删除文件以继续
解决方法:
-
直接删除".git"文件夹内的"index.lock"文件
-
git命令
git clean -f .git/index.lock
-
-
报错:error: cannot rebase: Your index contains uncommitted changes.
error: Please commit or stash them.解决步骤:
- git stash
- git pull --rebase
- git stash pop
reference
Git使用教程,最详细,最傻瓜,最浅显,真正手把手教 - 知乎 (zhihu.com)
Git报错:Another git process seems to be running in this repository - willingtolove - 博客园 (cnblogs.com)
id_rsa.pub如何查看_糖醋里脊Jeremy的博客-CSDN博客_id_rsa.pub在哪
标签:文件,常用,git,个人,--,暂存区,commit,分支 From: https://www.cnblogs.com/chenglixue/p/17008922.html