git
全局用户配置
C:\Users\Administrator\.gitconfig ( 是全局用户配置 )
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[user]
name = JUN-95
email = 1205450959@qq.com
配置全局用户名
- git config --global user.name “JUN-95”
配置全局用户邮箱
- git config --global user.email “1205450959@qq.com”
查看文件状态
- git status [fileName]
查看所有文件的状态
- git status
添加所有文件到暂存区
- git add .
添加暂存区中的文件到本地仓库
- git commit -m “注释”
.gitignore 文件配置
ide中通过.gitignore 文件来配置不让git同步到远程的文件设置
.gitignore
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.class
*.log
*.lock
# Package Files
*.jar
*.war
*.ear
target/
# idea
.idea/
*.iml
*velocity.log*
### STS ###
.apt_generated
.factorypath
.springBeans
### IntelliJ Idea ###
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/
*.log
tmp/
#rebel
*rebel.xml*
与远程配置ssh免秘钥登录
进入C:\Users\Administrator\ 中,cd ~
ssh-keygen # 生成公钥
切换分支:
git checkout 分支名
新建分支并切换到新分支
- git checkout -b
- -d --delete:删除
- -D --delete --force的快捷键
- -f --force:强制
- -m --move:移动或重命名
- -M --move --force的快捷键
- -r --remote:远程
- -a --all:所有
拉取远程最新的变更到本地:
git fetch
将代码还原到某个版本(包括工作目录):
git reset --hard 版本号
git日志: git log --pretty=oneline
查看Git的提交(commit)记录:
git log
想把远程分支最新的代码给拉下来,然后合并到本地上。我们可以用
git fetch
和git merge
来实现,也可以通过git pull
来实现。一般我用的都是git fetch
+git merge
,这样会更加可控一些
git 上传项目
未创建仓库
echo "# data analyze" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin https://github.com/JUN-95/recommendSystem.git
git push -u origin master
已创建仓库
git remote add origin https://github.com/JUN-95/recommendSystem.git
git branch -M master
git push -u origin master
查看分支:git branch
创建分支:git branch
切换分支:git checkout 或者git switch
创建+切换分支:git checkout -b 或者git switch -c
合并某分支到当前分支:git merge
删除分支:git branch -d
工作区:写代码工作的地方
暂存区:临时提交的地方,工作区git add
到这里
本地库:历史版本存储的地方, 暂存区git commit
到这里
本地库push -》 远程库
远程库 -》 clone 到本地库 -》 push 到 远程库
将远程库的修改pull到本地
ls -la 查看全部文件,包括隐藏目录 还有当前目录 . 和 …
ls -lA 查看全部文件,包括隐藏目录 但不显示 . 和 …
项目级别、仓库级别:仅在本地库有效
git config user.name jun
git config user.email 123@qq.com
$ cat .git/config 查看当前项目详情
系统用户级别:登录当前操作系统的用户范围
git config --global user.name jun
git config --global user.email 123@qq.com
$ cat ~/.gitconfig 查看全局配置详情
添加到暂存区:
git add
取消缓存到暂存区:
git rm --cached
添加到本地库(保存历史版本的地方):
git commit
当对文件有修改时,git status
:
git restore 可以重置文件
当已经使用git add
添加文件到暂存区后,说明已经对文件进行追踪,可以使用:use “git add
” and/or “git commit -a
”:
no changes added to commit (use “git add” and/or “git commit -a”)
直接添加文件到本地库的注释信息:
$ git commit -m “my second commit message” [file]
日志
查看提交修改文件的日志,显示备注
git log 只显示提交到
本地库
的日志信息
简化日志:
git log --pretty=oneline
git log --oneline
查看文件修改后全部步数的指针,commit到本地库中
,才会显示:
git reflog
日志翻页
git log 默认会显示全部的详细的提交日志,提交的 ID、作者、日期、还有提交的描述。 按下 f 键可以向下翻页**,b 键可以向上翻页、 q 可以退出显示。 加上 --oneline 选项,可以显示一个简单的日志列表 **git log --oneline 。
版本切换
git reset --hard
返回,回退之前的版本:
git reset --hard HEAD^
git reset --hard HEAD^^ 回退两个版本
git reset --hard HEAD~3 回退三个版本
git reset
–soft
仅仅在本地库移动HEAD指针
–mixed
1、在本地库移动HEAD指针
2、重置暂存区
–hard
1、在本地库移动HEAD指针
2、重置暂存区
3、重置工作区
删除文件后提交修改:
git add/rm …
删除文件后恢复:
git restore …
git commit 提交到本地库中后,可以在git reflog中查看文件删除操作对应的指针
可以通过git reset --hard <hash>
重新找回有原文件的指针
如果只在暂存区提交了,想把删除的文件找回,可以:
git reset --hard
因为git log 、git reflog 中显示的hash只会显示已经git commit 提交后的操作,如果只停在暂存区,则不会显示在log中,自然就不能通过hash进行版本控制,但是可以通过git reset --hard HEAD进行回溯版本。但是前提是当创建了文件后,要已经将创建文件的操作git commit 提交到本地库,这样才能进行版本定位,这样即使rm file 后没有提交commit 到本地库,也能通过 以上方法找回文件。
文件比较
git diff <对比的版本hash/ HEAD>
git diff HEAD 不加文件名对比已
本地库
中全部文件
分支
创建分支:
git branch <分支名>
查看分支:
git branch -v
切换分支:
git checkout <分支名>
合并分支:
1、切换到对应想要合并到哪个分支,比如合并到主分支master,就切换到master分支
2、使用git merge <分支名> ,就合并到master中
分支merge合并冲突问题
1、将冲突的文件进行编辑,删除特殊符号
2、修改文件
3、git add
4、git commit -m “some commit” [不能加文件名]
远程仓库
新建远程仓库后,通过与本地库进行连接:
git remote add origin https://github.com/yourRepository.git
origin 是远程仓库地址的别名
git remote -v 查看远程仓库
git branch -f main main~1 # 表示将分支回退到前1次提交,这里有HEAD和main,两个指针,如果这里使用git branch -f, 则会吧HEAD 和 main两个指针都移动到前一个提交的地方,这里的效果和git reset main~1 的效果一样。
但是如果使用git revert, 会将main1拷贝一份都main后面,然后指向main1, 从而实现回到前一个提交的地方。
git rebase main ; 这里的意思是将当前的HEAD 指向的分支,合并到main上,注意,这里是将当前HEAD,拷贝一份,然后再将拷贝的HEAD合并到main上。
如果想要将当前分支push到远程,一定要先git checkout 到当前分支。再进行push。
git push origin main 是指,将本地的main分支,提交到远程的origin仓库中。
git push origin source:destination
1648304889176
因为你可能在 foo 分支上的工作还未完成,你也不想弄乱它 ,所以把他和origin/foo捆包在一起。
git-cherry-pick 是用来将所需要的分支,复制一份到HEAD下面,(需要这些结点的hash)
当你知道你所需要的提交记录(并且还知道这些提交记录的哈希值)时, 用 cherry-pick 再好不过了 —— 没有比这更简单的方式了。
但是如果你不清楚你想要的提交记录的哈希值呢? 幸好 Git 帮你想到了这一点, 我们可以利用交互式的 rebase —— 如果你想从一系列的提交记录中找到想要的记录, 这就是最好的方法了
接下来这种情况也是很常见的:你之前在 newImage
分支上进行了一次提交,然后又基于它创建了 caption
分支,然后又提交了一次。
此时你想对某个以前的提交记录进行一些小小的调整。比如设计师想修改一下 newImage
中图片的分辨率,尽管那个提交记录并不是最新的了。
我们可以通过下面的方法来克服困难:
- 先用
git rebase -i
将提交重新排序,然后把我们想要修改的提交记录挪到最前 - 然后用
git commit --amend
来进行一些小修改 - 接着再用
git rebase -i
来将他们调回原来的顺序 - 最后我们把 main 移到修改的最前端(用你自己喜欢的方法),就大功告成啦!
正如你在上一关所见到的,我们可以使用 rebase -i
对提交记录进行重新排序。只要把我们想要的提交记录挪到最前端,我们就可以很轻松的用 --amend
修改它,然后把它们重新排成我们想要的顺序。
但这样做就唯一的问题就是要进行两次排序,而这有可能造成由 rebase 而导致的冲突。下面还是看看 git cherry-pick
是怎么做的吧。
要在心里牢记 cherry-pick 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题)。
git describe
的语法是:
git describe
`` 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD
)。
它输出的结果是这样的:
___g
tag
表示的是离 ref
最近的标签, numCommits
是表示这个 ref
与 tag
相差有多少个提交记录, hash
表示的是你所给定的 ref
所表示的提交记录哈希值的前几位。
当 ref
提交记录上有某个标签时,则只输出标签名称