本文参考自: 廖雪峰老师的Git教程,仅为了方便本人使用Git时查找命令用,不保证命令的准确性,如使用本文命令给您造成损失,本人概不负责!
目录
一、初始化设置
二、把文件添加到版本库
三、版本切换、管理修改、删除文件
四、远程仓库
五、分支管理
六、标签管理
七、自定义Git
一、初始化设置
姓名与Email
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
注意:
git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置
当然也可以对某个仓库指定不同的用户名和Email地址
创建目录
mkdir learngit
cd learngit
pwd # 显示当前目录
git init # 把当前路径下的目录变成Git可以管理的仓库
ls -ah # 查看所有文件
二、把文件添加到版本库
写一个文件readme.txt
一定要放到learngit目录下(子目录也行)
第一步,用命令git add告诉Git,把文件添加到仓库:
git add readme.txt
第二步,用命令git commit告诉Git,把文件提交到仓库:
git commit -m "wrote a readme file"
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."
三、版本切换、管理修改、删除文件
***要随时掌握工作区的状态,使用
git status
如果git status告诉你有文件被修改过,用git diff可以查看修改内容:
git diff
git diff 比较的是工作区文件与暂存区文件的区别(上次git add 的内容)
git diff --cached 比较的是暂存区的文件与仓库分支里(上次git commit 后的内容)的区别
***版本回退
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
git log
git log --pretty=oneline # 简版查看
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令:
git reset --hard commit_id
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
git reflog
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- readme.txt
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD readme.txt
就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
git rm test.txt
git commit -m "remove test.txt"
四、远程仓库
本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "[email protected]"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
要关联一个远程库,使用命令git remote add origin [email protected]:path/repo-name.git:
git remote add origin https://github.com/github账号/learngit.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令:
git push origin master 推送最新修改;
这儿出现错误:
fatal: unable to access 'https://**':
SSL certificate problem: unable to get local issuer certificate
解决办法:
git config --global http.sslVerify false
git push -u origin master
弹出登录框登录github账号即可
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆:
git clone [email protected]:wochonglai/learngit.git
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
五、分支管理
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch second
切换分支:git checkout second
创建+切换分支:git checkout -b second
切换到主干:
git checkout master
合并某分支到当前分支:git merge second
删除分支:git branch -d second
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git merge --no-ff -m "merge with no-ff" dev
bug修复:
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场:
git stash pop
查看stash内容:
git stash list
也可用:git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
恢复指定的stash,用命令:
git stash apply [email protected]{0}
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
git branch -D feature
查看远程库信息,使用:
git remote 或者 git remote -v
从本地推送分支,使用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,如果有冲突,要先处理冲突。
多人协作的工作模式通常是这样:
首先,可以试图用git push origin <branch-name>推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令:
git branch --set-upstream-to <branch-name> origin/<branch-name>。
rebase操作可以把本地未push的分叉提交历史整理成直线:
git rebase
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
六、标签管理
新建一个标签,默认为HEAD,也可以指定一个commit id:
git tag <tagname> 或者 git tag v1.5 p2e52
指定标签信息:
git tag -a <tagname> -m "message..."
查看所有标签:
git tag
查看标签信息
git show <tagname>
推送一个本地标签:
git push origin <tagname>
推送全部未推送过的本地标签:
git push origin --tags
删除一个本地标签:
git tag -d <tagname>
删除一个远程标签:
git push origin :refs/tags/<tagname>
七、自定义Git
****忽略特殊文件
忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
配置别名:
每个仓库的Git配置文件都放在.git/config文件中,而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
git config --global alias.别名 别名指向的命令
如:
git config --global alias.co checkout
git config --global alias.ci commit
另外:
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
****搭建Git服务器
参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000
颜色主题设置
color:
RGB:229,225,204
让命令输出看起来更醒目:
git config --global color.ui true