GIT学习随笔
Posted 扬帆去远航
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIT学习随笔相关的知识,希望对你有一定的参考价值。
GIT学习随笔
学习参考路径:
- https://www.liaoxuefeng.com/wiki/896043488029600
- https://study.163.com/course/courseLearn.htm?courseId=1004421003#/learn/video?lessonId=1048771063&courseId=1004421003
- https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000
git pull只是拉取当前分支内容?
git结构
- 工作区
- 暂存区
- 版本区(仓库区)
git 理解
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
为什么Git添加文件需要add
,commit
一共两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:
$ git add file1.txt 添加到暂存区
$ git add file2.txt file3.txt
$ git commit -m "add 3 files." 提交到版本库
git创建本地仓库操作
-
git初始化:
git init
-
git 配置:
git config user.name "name"
git config user.email "email"
-
查看用户及邮箱:
git config user.name
git config user.email
-
设置忽略文件:
新建 .gitignore文件,在这个文件中写入忽略规则。
忽略py文件:*.py
忽略t目录:/t
查看日志
git log
查看提交的记录
git log --pretty=oneline
/ git log --oneline
一行展示
git log -p
展示修改了哪些文件,修改的内容是什么
git reflog
记录你的每一次命令
gitk
图形化界面查看提交记录
git log -n
查看最近的n次提交
git克隆
# git拉取远程指定分支
$ git clone 远程仓库地址 -b 远程分支 [本地文件目录]
# 查看git的配置信息
git config -l
git注意点
工作区的文件A
内容与远程区文件A内容不一致,pull之后会覆盖
工作区文件A内容
暂存区的文件A
内容与远程区文件A内容不一致,必须commit 或者 stash后才能pull(否则报错),然后解决冲突
commit前的内容都可以暂存,git pull之后解决冲突即可
切换分支前必须commit 或者 stash
解决冲突的两种方式
解决方式1:
git add .
git commit -m \'注释\'
git pull,有冲突
解决冲突,继续提交推送
解决方式2:【git在不想commit的情况下进行git pull操作】
git stash save \'注释\'
git pull
git stash pop index
解决冲突,继续提交推送
git stash使用
# 暂存(commit前的内容都可以暂存)
git stash save \'本次暂存的标识名字\'
# 查看暂存记录
git stash list
# 恢复指定的暂存工作, 暂存记录保存在list内,需要通过list索引index取出恢复
# pop命令恢复,恢复后,删除保存在list内记录
git stash pop stash@{index}
# apply命令恢复,恢复后,暂存区域会保留当前的记录
git stash apply stash@{index}
# 删除list内的某个暂存
git stash drop stash@{index}
# 删除全部暂存
git stash clear
比较差异
git diff [文件名]
git diff --cached [文件名]
git diff HEAD [文件名]
git diff
-abcd -代表文件修改前的
+abcde +代表文件修改后的
撤销
前提:必须是已经跟踪的文件。若新增一个文件未add跟踪,则不可撤销。
-
放弃工作区的修改
即还没有git add .
git checkout -- 目录/文件路径
缓存区覆盖工作区 -
git checkout 版本号 目录/文件路径
版本库覆盖工作区,并覆盖缓存区
版本回退
git reset --hard HEAD^
回退上个版本
git reset --hard HEAD~10
回退10个版本
git reset --hard <版本号>
回退到指定的版本号
向前或向后切换版本(指针的移动)
HEAD表示当前最新版本
HEAD^表示当前最新版本的前一个版本
HEAD^^表示当前最新版本的前两个版本,以此类推...
HEAD~1表示当前最新版本的前一个版本
HEAD~10表示当前最新版本的前10个版本,以此类推...
撤销与回退版本的对比
git checkout 版本号 .
分支master执行版本号不变,只是将其他版本的内容覆盖到了当前版本
git reset --hard 版本号
分支master指向其他版本号。
git checkout 版本号 .
王鹏远@DESKTOP-7348GT4 MINGW64 ~/Desktop/BCD (master)
$ git reflog
f29b04a (HEAD -> master) HEAD@{0}: commit: C3
85cb019 HEAD@{1}: commit: C2
54a8043 HEAD@{2}: commit (initial): C1
王鹏远@DESKTOP-7348GT4 MINGW64 ~/Desktop/BCD (master)
$ git log --oneline
f29b04a (HEAD -> master) C3
85cb019 C2
54a8043 C1
git reset --hard 版本号
$ git reflog
f1d7e32 (HEAD -> master) HEAD@{0}: commit: C3
18a1f87 HEAD@{1}: reset: moving to 18a1
571589f HEAD@{2}: commit: C2
18a1f87 HEAD@{3}: commit (initial): C1
王鹏远@DESKTOP-7348GT4 MINGW64 ~/Desktop/ABC (master)
$ git log --oneline
f1d7e32 (HEAD -> master) C3
18a1f87 C1
删除文件
https://www.liaoxuefeng.com/wiki/896043488029600/900002180232448
分支
重点理解:master是一个初始分支,master指向最新的提交,HEAD指向当前分支
-
创建分支:
$ git branch dev
-
切换分支:
$ git checkout dev
-
创建并切换分支:
$ git checkout -b dev
-
推送本地分支到远程分支:
$ git push --set-upstream origin dev
-
查看分支:
$ git branch
查看本地所有的分支名称$ git branch -a
查看本地及远程所有的分支名称$ git branch -r
查看远程所有的分支名称$ git branch -v
查看本地所有的分支名称+版本号+注释信息
-
合并分支:
git merge dev
-
删除本地分支:
$ git branch -d dev
丢弃一个没有被合并过的分支,可以通过
git branch -D <name>
强行删除 -
删除远程分支1:
- 先删除本地分支:
$ git branch -d dev
- 再推送到远程:
$ git push origin :dev
(因为推送到远程分支是:git push origin dev:dev
)
- 先删除本地分支:
-
删除远程分支2:
git push origin --delete 分支名
切换分支的一个注意点
在dev分支下修改了一个已经commit的文件,此时修改的文件在commit之前无法切换分支
可以使用
git stash
暂存
$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
b.txt
Please commit your changes or stash them before you switch branches.
查看分支的合并情况
git log --graph --pretty=oneline --abbrev-commit
git log --graph
解决冲突
冲突解决:修改文件内容
修改后操作:
$ git add readme.txt
$ git commit -m "conflict fixed"
远程仓库
创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了
关联本地仓库到远程仓库
-
本地初始化一个仓库:
git init
-
配置:
git config user.name "wpy"
git config.email "email"
-
github创建仓库
-
关联仓库:
-
git remote add origin git@github.com:wpy/仓库名.git
关联 -
git push -u origin master
加上了
-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令 -
之后的提交可以使用
git push origin master
-
查看远程库的信息
-
查看远程仓库信息:
$ git remote
$ git remote origin
-
查看详细的远程信息:
git remote -v
$ git remote -v origin git@212.64.57.50:Yong/Feed.git (fetch) origin git@212.64.57.50:Yong/Feed.git (push)
-
查看远程分支:
git branch -r
$ git branch -r origin/HEAD -> origin/master origin/dev origin/master origin/test
-
查看本地及远程所有分支:
git branch -a
$ git branch -a dev master * test remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master remotes/origin/test
推送本地分支到远程分支
本地开好分支,然后推送到远程
$ git checkout -b dev //创建并切换到分支dev
$ git push origin dev:dev
//推送本地的dev(冒号前面的)分支到远程origin的dev(冒号后面的)分支(没有会自动创建)
通俗方式二:
抓取远程分支(切换远程分支)
远程先开好分支,然后拉取到本地
切换到远程dev分支,在本地起同名分支,并切换到本地的这个同名分支
git checkout -b dev origin/dev //检出远程的dev分支到本地
开发完成后推送分支到远程:
$ git push origin dev
通俗方式二:
删除远程分支
git push origin --delete 远程分支名
error:
回退版本---修改内容/commit---push(报错)---pull(冲突,合并)---add---commit---push
aaa@DESKTOP-2EBU1DH MINGW64 ~/Desktop/lx (test)
$ git commit -m "three 3"
[test 88c7878] three 3
1 file changed, 2 insertions(+), 1 deletion(-)
aaa@DESKTOP-2EBU1DH MINGW64 ~/Desktop/lx (test)
$ git push
To github.com:wangpy-github/lx.git
! [rejected] test -> test (non-fast-forward)
error: failed to push some refs to \'git@github.com:wangpy-github/lx.git\'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: \'git pull ...\') before pushing again.
hint: See the \'Note about fast-forwards\' in \'git push --help\' for details.
aaa@DESKTOP-2EBU1DH MINGW64 ~/Desktop/lx (test)
$ git pull
Auto-merging b.txt
CONFLICT (content): Merge conflict in b.txt
Automatic merge failed; fix conflicts and then commit the result.
版本打标签
本地打标签:
git tag -a 标签名 -m \'标签描述\'
推送标签到远程仓库:
git push origin 标签名
删除本地标签
git tag -d 标签名
删除远程仓库标签
git push origin --delete tag 标签名
以上是关于GIT学习随笔的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程