在这里记录我的Git学习记录:
1.创建Git版本库:
git clone [email protected]:498511842/gitskills.git//git clone克隆一个本地库
//注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了
cdlearngit
pwd //用于显示当前目录 如D:/learngit
第二步:通过git init把刚创建的目录变成Git可以管理的仓库:
gitinit
//终端显示:Initialized empty Git repository in
//目录下多出.git目录 ls -ah 可查看隐藏
然后把文件添加到版本库。
gitaddreadme.txt//(文件名)注意,可反复多次使用,添加多个文件;
gitcommit-m"wrote a readme file"//(提交并且描述)
//commit可以一次提交很多文件,所以你可以多次add不同的文件
2.时光穿梭
git status//命令可以让我们时刻掌握仓库当前的状态
git diff readme.txt//git diff顾名思义就是查看difference
//要随时掌握工作区的状态,使用git status命令。
//如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
2.1 版本退回
gitlog//命令可以告诉我们历史记录,在Git中,我们用gitlog命令查看 gitlog命令显示从最近到最远的提交日志
gitlog/如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数
git reset--hard HEAD^//把当前版本退回到上一个版本 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
cat readme.txt//查看文件内容
git reset--hard ID//ID为版本号commit id
git reflog//git reflog用来记录你的每一次命令
//HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
//穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
//要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
2.2 工作区和暂存区
去廖老师那去看
2.3 管理修改
git diff HEAD-- readme.txt//命令可以查看工作区和版本库里面最新版本的区别
每次修改,如果不用git add到暂存区,那就不会加入到commit中。
具体去自己看
2.4 撤销修改
git checkout-- readme.txt//git checkout -- file可以丢弃工作区的修改
gitresetHEADreadme.txt//gitresetHEAD可以把暂存区的修改撤销掉(unstage),重新放回工作区
2.5 删除文件
rm test.txt//通常直接在文件管理器中把没用的文件删了,或者用rm命令删了
git rm test.txt//确实要从版本库中删除该文件,那就用命令git rm删掉,并且gitcommit
//先手动删除文件,然后使用git rm 和gitadd效果是一样的
git checkout-- test.txt//删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本
3.远程仓库
首先创建SSH Key
ssh-keygen -t rsa -C"[email protected]"//需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可
//可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人
//然后登陆GitHub 设置SSH Keys然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
//点“Add Key”,你就应该看到已经添加的Key
3.1 添加远程库
//首先登陆GithubCreateanewrepo 创建一个新仓库
//在Repositoryname填入仓库名 其他保持默认设置,点击“Createrepository”按钮,就成功地创建了一个新的Git仓库
git remoteaddorigin [email protected]:498511842/learngit.git
git remoteaddorigin https://github.com/498511842/MyPython.git//两种方法
git push -u originmaster//第一次推送使用-u 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
git push originmaster把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
3.2 从远程库克隆
登陆GitHub,创建一个新的仓库,名字叫gitskills 勾选Initialize this repository with a README
git clone [email protected]:498511842/gitskills.git//git clone克隆一个本地库
//注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了
4.分支管理
看廖雪峰的说法
4.1 创建与合并分支
git checkout -b dev//首先,我们创建dev分支,然后切换到dev分支
//git checkout命令加上-b参数表示创建并切换,相当于以下两条命令
git branch dev
git checkout dev
//然后,用git branch命令查看当前分支
git branch//git branch命令会列出所有分支,当前分支前面会标一个*号
//然后提交 add commit
//现在,dev分支的工作完成,我们就可以切换回master分支
git checkout master
//我们把dev分支的工作成果合并到master分支上
git merge dev
git branch -d dev//合并完成后,就可以放心地删除dev分支了
git switch -c dev//创建并切换到新的dev分支,可以使用
git switch master//直接切换到已有的master分支
查看分支 git branch
创建分支 git branch
切换分支 git checkout
创建and切换分支 git checkout -b
合并分支到当前分支 git merge
删除分支 git branch -d
4.2 解决冲突
用git log --graph命令可以看到分支合并图
4.3 分支管理策略
git merge --no-ff -m "merge with no-ff" dev//合并dev分支,请注意--no-ff参数,表示禁用Fast forward
git log --graph --pretty=oneline --abbrev-commit//用git log看看分支历史
4.4 BUG分支
//当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场
//在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick
4.5 Feature分支
//开发一个新feature,最好新建一个分支
//如果要丢弃一个没有被合并过的分支,可以通过git branch -D
4.6 多人协作
git remote//要查看远程库的信息,用git remote
git remote -v//或者,用git remote -v显示更详细的信息
git push origin dev//如果要推送其他分支,比如dev,就改成
//从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
//在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
//建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
//从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
4.7 Rebase
git rebase//rebase操作可以把本地未push的分叉提交历史整理成直线;
//rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
5.标签管理
//tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起
5.1 创建标签
git tag v1.0//敲命令git tag
git tag//可以用命令git tag查看所有标签
git tag v0.9 f52c633//比方说要对add merge这次提交打标签,它对应的commit id是f52c633,敲入命令
git show v0.9//标签不是按时间顺序列出,而是按字母排序的。可以用git show
git tag -a v1.0 -m "version 0.1 released" f52c633//还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字
//命令git tag
//命令git tag -a
//命令git tag可以查看所有标签
5.2 操作标签
git tag -d v0.1//如果标签打错了,也可以删除
//因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除
git push origin v1.0//如果要推送某个标签到远程,使用命令git push origin
git push origin --tags//或者,一次性推送全部尚未推送到远程的本地标签
//如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除git tag -d v0.9
//然后,从远程删除。删除命令也是push,但是格式如下git push origin :refs/tags/v0.9
6.使用GitHub
7.使用Gitee
//使用Gitee和使用GitHub类似,我们在Gitee上注册账号并登录后,需要先上传自己的SSH公钥。选择右上角用户头像 -> 菜单“修改资料”,然后选择“SSH公钥”,填写一个便于识别的标题,然后把用户主目录下的.ssh/id_rsa.pub文件的内容粘贴进去
git remote add origin [email protected]:liaoxuefeng/learngit.git//在本地库上使用命令git remote add把它和Gitee的远程库关联
git remote -v//git remote -v查看远程库信息
git remote rm origin//删除已有的GitHub远程库origin
git remote add github [email protected]:michaelliao/learngit.git//先关联GitHub的远程库
git remote add gitee [email protected]:liaoxuefeng/learngit.git//再关联Gitee的远程库
如果要推送到GitHub,使用命令git push github master
如果要推送到Gitee,使用命令git push gitee master
8.自定义Git
git config --global color.ui true//让Git显示颜色,会让命令输出看起来更醒目
Git 全局设置
git config --global user.name "username"
git config --global user.email "[email protected]"
创建Git仓库
mkdir MyPython
cd MyPython
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/PanPlan/MyPython.git
git push -u origin master
已有仓库?
cd existing_git_repo
git remote add origin https://gitee.com/PanPlan/MyPython.git
git push -u origin master
8.1 忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
忽略文件的原则是:
1. 忽略操作系统自动生成的文件,比如缩略图等;
2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
//使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了
如果文件被忽略又确实想添加该文件,可以用-f强制添加到Git
git add -f App.class
或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查
git check-ignore -v App.class
Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则
8.2 配置别名
git config --global alias.st status//我们只需要敲一行命令,告诉Git,以后st就表示status
当然还有别的命令可以简写,很多人都用co表示checkout,ci表示commit,br表示branch
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git ci -m "bala bala bala..."//以后提交就可以简写成:
--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
git config --global alias.last 'log -1'//配置一个git last,让其显示最后一次提交信息
甚至还有人丧心病狂地把lg配置成了:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
//配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
//每个仓库的Git配置文件都放在.git/config文件中
//别名就在[alias]后面,要删除别名,直接把对应的行删掉即可
//而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
//配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置
上面这么多其实最常用还是clone和push
原文地址