git项目的文件夹
.git文件,包括:
- stage(或者叫index)的暂存区:git add把文件添加进去,实际上就是把文件修改添加到暂存区。
- master分支:初始化出来的分支。git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
- HEAD指针:master的指针。
在文件目录下执行命令,会将文件夹设置为git仓库,并生成一个.git文件,用于保存本地的提交信息等。
将文件xxx加入到修改列表中。
将add添加过的所有文件一次性提交到”本地“的仓库。只会提交add之后的。
- 例如:如果修改文件a(记做修改1)并add,再修改了文件a(记做修改2)并且没有重新add,此时进行一次commit。那么只有修改1的修改会被提交,但是“本地版本”还是修改2,相当于你在commit之后又修改了。
查看仓库当前的状态,例如add(有新修改,但是没add)、commit(有add,但是没commit)等状态。git status告诉你有文件被修改过。
查看文件xxx和git本地库中的版本的具体差别(多了哪行,缺了哪行这样。这个操作在add之前)。git diff可以查看修改内容。
1.比较工作区与暂存区(branch指定具体分支,可选参数):git diff <branch> <filename>
2.比较工作区与版本库(这里版本库指commit后的状态,<commit>=HEAD 时:查看工作目录同最近一次 commit 的内容的差异):git diff <commit> <filename>
3.比较暂存区与最新本地版本库(本地库中最近一次commit的内容):git diff --cached <filename>
4.比较暂存区与某一版本库(这里版本库指commit后的状态)区别:git diff --cached <commit> <filename>
5.比较版本之间的区别(这里版本指commit后的状态):git diff <commit> <commit>
命令显示从最近到最远的“提交”日志。加上被选参数,可以让信息逐行展示。其中包含“提交”版本的id,即<commit>。
git log --graph --pretty=oneline --abbrev-commit:查看分支合并情况。
查看“命令”历史,其中包括此次命令执行后得到的版本的版本号,即<commit>。
1.回退版本,将数据回退到“已提交”的某个版本,commit是对应“提交”版本的id,可以通过git log、git reflog获取:git reset --hard <commit>
2.把暂存区的修改回退到工作区,即撤销add操作的影响:git reset <commit> <filename>。操作完之后一般还需要git checkout -- <filename>撤销工作区的修改,这一步不会修改<filename>的内容哦,只是相当于没有进行add,具体表现git status查看对应文件绿色变红色。
在工作区的修改或删除全部撤销,分为两种情况
1.修改:file自修改后还没有被放到暂存区,撤销修改就回到和版本库一模一样的状态;
2.修改:file已经添加到暂存区后,又作了修改,撤销修改就回到添加到暂存区后的状态。
3.删除:文件通过git rm删除了,需要撤销,即可用git checkout -- <filename>。
即变回了最近一次commit(1)、add(2)后或rm(3)前的状态。
从git里删除某文件,执行完之后还需要commit才能生效。
git添加远程仓库,将本地的仓库与之关联。origin是约定俗成的远程仓库的代称。这是整个项目指定关联
与远程仓库关联指定分支
将本地的分支推送到云端库,其中-u参数在远端是空的时候带上,会把本地的分支和远程的分支关联起来。后续推送就不要带-u了
从云端将项目搞下来
查看分支,-a参数会显示云端的
创建branch分支,但不切换到。
切换分支,-c参数代表切换的同时创建。
也可以用git checkout (-b) <branch>替代,一样的意思。
对于命令git switch (-c) <branch> origin/<branch>,这个命令也叫抓取分支。
按照我的理解,只能是与云端关联了之后(例如11或11.5)才能使用,意思是在本地创建一个分支,同时关联到云端的对应分支。
将branch分支,合并到“当前所在”的分支。
假设dev为要被合并的分支,如果只修改了dev,没动master,执行命令:git merge dev,会启用Fast forward机制,即直接将head指针,指向dev的头部。
如果不想这种情况,执行命令:git merge --no-ff -m "merge with no-ff" dev,会同步dev到master,并且head指针指向master头部。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
不太懂,总之意思是合并的时候带上参数。
删除指定的branch分支,该分支需被合并过。
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <branch>强行删除
保存当前工作区的状态,并且将该工作区的状态变为没有改动。并且可以执行多次,产生多个快照(我觉得叫快照合适?)
即假如修改了a.txt文件,但是这时候要在原基础上修改,那么可以先通过git stash保存下工作区的状态。
在之前保存了的分支上执行命令,将得到之前保存了状态的快照,一般格式是:
stash@{0}: WIP on dev: 8721256 test fff
stash@{1}: WIP on dev: 8721256 test fff
其中stash@{0}是选填参数,所以用()扩起来。
返回到对应快照并删除对应的快照,其中stash@{0}是上面list展示出来的。
该命令等同于:git stash aply (stash@{0}):回到某个快照 + git stash drop (stash@{0}):删除某个快照
获取一个特定的提交到当前分支,那个提交是在别个分支的,通过commit指定的码唯一确定
推送分支,就是把指定本地分支上的所有本地提交推送到远程库,本地分支就是这里的branch。
假设在dev分支下执行命令,且该分支与origin/dev关联,那么会拉取别人在远程的修改,拉下来之后解决冲突,然后再提交并推送远端。
目前觉得这个命令就在push发生冲突时才有用
TODO
创建标签,默认标签是打在最新提交的commit上的。
切换到要打标签的分支,然后执行命令,例如:git tag v1.0,commit为可选参数,如果指定就会把标签打到对应提交记录上(可以是之前提交的)
-a是指定名字,-m指定说明文字,-m也是可选的。
查看所有标签,按名称来排序的
查看该次标签的具体信息
删除某个本地标签。
git push origin :refs/tags/<tagname>: 可以删除一个远程标签
推送标签到远程
git push origin --tags:一次性推送所有本地标签到远程
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。