赞
踩
git学习笔记
Git官网:http://git-scm.com
本文主要是Git教程 | 廖雪峰的学习总结常用Git命令清单 | 阮一峰
Pro Git
git-cheat-sheet
author: gyc514893758
git 是分布式版本控制系统
对于一个项目,有不同版本,可以记录每次改动,可以有不同分支
方便回退、协作等
每个人电脑上都是一个完整的版本库,不联网也能工作
方便拉取分支、合并修改
Windows下载地址
按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
打开“Git Bash”,输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
注意:git config
中的--global
表示此电脑上所有git仓库都使用该配置。你也可以为某个仓库指定不同的用户名和E-mail地址。
使用git config --list
命令可以查看所有设置
版本库,也叫仓库,repository。
可以理解成一个被Git管理的目录、文件夹。git可以跟踪每个文件的修改删除。
Open Git Bash here
git init
建立仓库.git
目录(默认隐藏),不要改动git add <file>
,添加成功没有消息git commit -m"<message>"
,将文件提交到仓库,-m
输入本次提交的说明,执行成功会告诉你改动add
可以添加多个文件,commit
一次提交当git commit
不带-m
参数时,进入vim编辑器。编辑完成,退出时:
按Esc
键退出编辑模式,然后:
wq
ZZ
+ 回车
q!
qa!
+ 回车
.git
。版本库包括:
master
master
的一个指针HEAD
指令git status
告诉我们当前仓库的状态。
Untracked files:
表示仍在工作区的文件Changes to be commited:
表示在缓存区,还没有提交的文件nothing
指令git diff <file>
会告诉你修改的内容
命令git log
告诉我们提交的历史记录,按Q
键退出查看
(git log --pretty=oneline
可以简化输出信息)
一长串16进制数字是版本号commit id
在git中,HEAD
表示当前版本,HEAD^
表示上个版本(上上个HEAD^^
,上100个HEAD~100
)
git reset --hard HEAD^
回退到上个版本
git reset --hard <commit id>
回退到版本号对应版本(id不用写全,只写前几位可识别就行)
重设,此版本之后的版本消失。此时log中不能查询目前回退到的版本之后的版本。
可以使用git reflog
查看每一次命令对应id,以回退到消失的版本
git revert --hard
不会丢失版本,它实际上是新的一版使用了以前的内容,本质上不是回滚。而reset
是完全退回到之前的版本。
git restore <file>
git restore --staged <file>
,再转1git reset --hard HEAD^
回退直接在文件管理器中删除,或者指令rm <file>
此时,工作区和版本库不一致。
如果确实要从版本库删除,就用git rm
删除,并且git commit
提交。
如果删错了,可以从版本库还原误删文件git checkout --<file>
git checkout
其实是用版本库版本替换工作区版本,无论工作区是修改还是删除,都可以“一键还原”。
GitHub提供Git仓库托管服务。本地Git仓库与GitHub仓库之间的传输通过SSH加密。
ssh-kyygen -t rsa -C"youremail@example.com"
。使用自己邮箱,并且一直回车(使用默认值)。成功后,在用户主目录(C:\Users\用户名
)里可以找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。id_rsa.pub
文件的内容。(Github允许添加多个Key)在本地创建一个git仓库后,想要在GitHub上创建一个同步的远程仓库。
git remote add origin git@github.com:<user/repo.git>
。origin
,默认叫法,也可以改成别的。git push -u origin master
把本地库内容推送到远程库。-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会关联二者。在以后的推送或者拉取时就可以简化命令git push origin master
。当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
先有远程库,从远程库克隆到本地
git clone git@github.com:<user/repo.git> <新建本地仓库名>
上述使用的是ssh
协议,速度最快。
有时也使用https
协议:git remote add origin https://github.com/user/repo.git
。
比较慢,且每次推送必须输入口令。
运行git remote rm <name>
命令。
使用前,建议先用git remote -v
查看远程库信息。然后,根据名字删除。比如删除origin:git remote rm origin
此处的“删除”其实是解除了本地和远程的绑定关系,远程的仓库仍存在。
创建一个属于自己的分支,不影响其他人的工作。可以和之前讲的一样管理。到开发完毕再一次性合并分支。
分支可以理解为当前工作目录的一个副本(平行世界)。
将项目划分成多条线,例如:在开发线(dev)上修改,之后合并到主线(master,main)上,保证主线的稳定性。
git branch
查看分支,*
标明当前分支,附加参数:
-r
远程库分支列表-a
所有分支,remotes
开头表示远程分支-v
查看一个分支的最后一次提交--merged
查看已合并到当前分支的分支--no-merged
查看所有未合并的分支git branch <name>
创建分支
git switch <name>
,git checkout <name>
转到分支
git switch -c <name>
,git checkout -b <name>
创建并转到分支
切换分支时工作区和暂存区应该是干净的。
git merge <name>
将分支合并到当前分支
git branch -d <name>
删除分支(已合并或者未修改
git branch -D <name>
强制删除分支(没有合并过,丢失修改)
git branch -m <old name> <new name>
重命名分支
不能自动合并的冲突,需手动解决(此时分支名变化):
<<<<<<<HEAD
<当前更改>
=======
<传入的更改>
>>>>>>><commit id>
手动编辑更改之后再提交。
git log --graph
可以查看合并分支图。
git stash
保存、隐藏当前工作状态,此时用git status
查看工作树是干净的。
git stash list
查看保存状态。
恢复工作状态(两种方法):
git stash pop
恢复并删除stashgit stash apply
恢复stashgit stash drop
删除stash可以多次stash,恢复指定的stash:
git apply stash@{0}
保存stash,创建bug分支、修改、提交、合并,删除bug分支,恢复stash。
此时修改了master分支的bug,该bug在dev分支上也存在,只复制这次提交:
git cherry-pick <commit id>
这个操作仍会生成一个commit id,虽然提交的内容相同,但本质不是同一次提交
从远程仓库克隆时,自动将本地的master
分支和远程的master
分支对应。远程库默认名称origin
。
git remote
查看远程库信息
git remote -v
显示远程库详细信息
git push <remote> <branch>
推送分支,将该分支所有本地提交推送到远程库。(需指定本地分支)
master
和dev
分支应与远程库同步,其他分支视情况而定。
推送分支前,应该先拉取分支(远程库可能比本地更新)。如有冲突,先解决冲突。
git pull
git branch --set-upstream <branch-name> origin/<branch-name>
建立本地分支与远程分支的关联。
git pull <remote> <remote branch>:<branch>
拉取远程分支,如果省略本地分支,默认同名
git push <remote> :<branch>
删除远程分支
给版本库打一个标签tag,取某个标签的版本。
就像给commit id起个名字加书签。
git tag <name>
给最新一次提交打标签
git tag <name> <commit id>
给历史某次提交打标签
git tag -a <tagname> -m'message'
可以指定标签信息
git tag
查看所有标签(按字母排序,不是时间)
git show <tagname>
查看某个标签信息
标签存储在本地,不会自动推送到远程。如果要推送到远程:
git push origin <tagname>
某个标签git push origin --tags
所有标签删除标签:
git tag -d <tagname>
删除本地标签git tag -d <tagname>
删除本地标签git push origin :refs/tags/<tagname>
删除远程标签忽略文件的原则是:
在工作区根目录创建.gitignore
文件,写入要忽略的文件名。
不需要从头写.gitignore
文件。所有配置文件可以直接在线浏览:https://github.com/github/gitignore. 组合即可。
如果想添加被忽略的文件:
git add -f <file>
强制添加
git check-ignore
检查哪条规则忽略了该文件。
.*
排除所有.
开头的隐藏文件
*.class
排除所有.class
类型文件
!.gitignore
不排除文件
可以通过https://gitignore.itranswarp.com 在线生成.gitignore
文件。
$ git config --global alias.co checkout
$ git config --global alias.cm commit
$ git config --global alias.br branch
$ git config --global alias.unstage 'reset HEAD'
$ git config --global alias.last 'log -1'
代替的命令是一个单词可以直接写,有空格加引号,有引号则单双引号交替。
每个仓库的配置文件在.git/config
中,当前用户的配置文件在用户主目录下隐藏文件.gitconfig
中。
别名就在[alias]
后面,可以直接修改。
# 适当显示颜色
$ git config --global color.ui true
https://www.liaoxuefeng.com/wiki/896043488029600/899998870925664
SourceTree
一个单词可以直接写,有空格加引号,有引号则单双引号交替。
每个仓库的配置文件在.git/config
中,当前用户的配置文件在用户主目录下隐藏文件.gitconfig
中。
别名就在[alias]
后面,可以直接修改。
# 适当显示颜色
$ git config --global color.ui true
https://www.liaoxuefeng.com/wiki/896043488029600/899998870925664
SourceTree
https://www.liaoxuefeng.com/wiki/896043488029600/1317161920364578
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。