下载地址:https://git-scm.com/【git源码:https://github.com/git/git】
####附大神教程:https://www.liaoxuefeng.com/####
下载对应系统的版本,安装省略,下面总结是由《GitHub入门与实践》一本学习总结而成。
第一部分——基本操作
一、Git Bash里设置用户名与邮箱
#git config --global user.name "name"
#git config --global user.email "email"
信息保存在“.gitconfig”文件中,属性为隐藏,windows在“C:\Users\用户名”下,Linux在“/home/用户名/”下
二、着色配置
#git config --global coulor.ui auto //颜色自动
三、生成用于SSH连接的SSH key
#ssh-key -t rsa -C "e_mail"
公钥:windows默认保存“C:\Users\用户名\.ssh\id_rsa.pub”,Ubuntu默认保存“/root/.ssh/id_rsa.pub”。
私钥:windows默认保存“C:\Users\用户名\.ssh\id_rsa”,Ubuntu默认保存“/root/.ssh/id_rsa”。
保存位置的known_hosts是用于保存ssh登录远程系统的公钥
使用GitHub的时候,公钥放在设置中的ssh选项中,可以放置多个ssh,用于不同的电脑去同步同一个项目
四、初始化仓库
#git init
用于初始化仓库,本地新建一个仓库的时候使用,如果GitHub上直接新建,本地不需要做这一步,直接clone远程到本地就可以。
五、查看仓库状态
#git status
查看分支等级(master等),文件修改状态,新建但未添加的文件,修改记录,commit新的记录等等
六、添加文件
#git add file_name
向git 暂存区添加文件,添加后才可能进行正常的版本管理。
#git add filename1 filename2 filename3
可以多个文件一起添加
七、提交,保存仓库历史记录
#git commit
将当前暂存区的文件实际保存到仓库的历史记录中,通过这些记录,可以在工作树中复原文件。
加《-m “字符串”》后缀,用作提交记录时的文字描述
#git commit -m “add a file”
如果没有-m参数,则会【后面添加】
如果报“Change not staged for commit:”,会提示几个修改过的文件,这些文件在git commit这前要add一下,也可以执行“#git add .”一次全部添加。
无更改的情况下,会提示:nothing to commit, working tree clean
#git commit -am "message"
这是git add 与 git commit的合体用法,message为信息描述。
八、查看提交日志
#git log
查看仓库中的提交日志。包括提交用户的用户名和email(在“一、”中设置的用户名和邮箱),提交的日期,提交时的描述(-m参数字符串),最重要的是提交的哈希值,
加“--pretty=short”,显示哈希值、提交人信息和描述,没有日期,相对洁一些
加“directory/filename”,可以针对一个文件显示日志,日志格式同git log
加“-p”参数,可以显示提交信息前后的文件改动前后差别(所有commit都显示)
加“-p directory/filename”,这两组参数组合使用,可以针对一个文件显示前后改动的差别(所有commit都显示)
当显示的内容超过一屏时,会一屏一屏显示,按空格换屏,点击“q”键退出。
加“--graph”参数,可以以图表的形式查看分支,形象,非常直观。
九、查看更新前后的差别
#git diff
查看当前工作树与暂存区所有被变更文件的前后差别,对暂存区操作后,不会再显示,如git add等操作后,不会再显示差别
参数“HEAD”,增加这个参数,是显示工作树与最后一次提交的差别,执行git add后也会显示区别,在执行git commit后才不会显示。
好的习惯,在执行git commit前执行git diff HEAD,然后查看区别,确认无误后再进行提交。
十、查看当前仓库操作日志
#git reflog
查看当前仓库的所有操作日志(只要不进行Git的GC操作就成),每一步都对应一个哈希值(只显示7位——头7位)。
十一、回溯历史版本
#git reset --hard 哈希值
哈希值可以不用全值,用前6位就可以(说是4位以上就ok,不知道包不包括4位)。之前的记录可以用git log来查找,如果之前做过回溯,可以用git reflog来根据操作日志来找。
操作的时候注意当前操作的分支【不确定需要不需要注意】
十二、修改提交信息
#git commit --amend
操作后会跳出编辑器,编辑器中可以修改描述信息,修改完成后,保存退出,就可以实现修改上一条提交的描述信息功能。
十三、压缩历史
#git rebase -i HEAD~2
操作后会压缩前2个commit记录,pickup的会留下(可以改一下),pickup改成fixup,后面的就删除掉了,记录就压缩为一条。
HEAD为头,2为两个,从头向后数,压缩2个,写3就是3个,如果里面的pickup不改fixup,那压缩后结果不变。
十四、添加远程仓库【向远程推送之前应该先添加远程】
#git remote add origin git@github.com:ientertech/CentHello.git
origin,这是标识符,具体作用不清楚,名字也可以改,作用不不太清楚,名字在仓库当前文件夹下面“.git”文件夹下面的config配置文件中可以查看到。git@github.com:ientertech/CentHello.git为远程仓库地址,本地推送远程,所以远程仓库在建立的时候不应该添加任务文件,包括“.git配置文件”。应该是空空的仓库。
origin名字是github默认的,就算使用别的名字上传,也只是当前仓库使用,其它终端git clone至本地后,默认还是origin。
十五、推送至远程
#git push
直接推送远程,推送的传动情况看当前在哪个分支下,可以git branch看在哪个支持,推送的时候就会推送至哪个分支下。
#git push -u origin master
执行#git push,当前分支的内容就会被推送给远程仓库origin的master分支。-u参数,是在推送的同时,将origin仓库的master分支设置为本地仓库当前分支的upstream(上游)。添加这个参数后,将来运行git pull命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从origin的master分支获取内容,活动另外添加参数的麻烦。
#git checkout -b feature
#git push -u origin feature
本地建议feature分支,然后push分支到远程仓库,远程也同样有feature分支了。
十六、从远程仓库获取
#git clone git@github.com:ientertech/CentHello.git
git clone命令会默认处于master分支下,同时系统会自动将origin分支与GitHub远程仓库(origin)的master分支在内容是完全相同
git clone 执行的时候会下载远程的仓库,到本地后是一个文件夹,所以在执行的时候不需要新建一个文件夹,直接执行后,仓库自带一个文件夹。
#git checkout -b feature origin/feature
这是为了把远程仓库的分支clone至本地,feature为本地命名,应该和远程一样,origin/feature为远程分支,可以用#git branch -a来查看远程分支信息。
第二部分——分支操作
基于特定主题的作业在特性分支中进行,完成后再与mastar分支合并。
一、显示分支一览表
#git branch
将分支进行列表显示,分支名前带“*”的为当然所在分支,主分支为master。
#git branch -a
添加“-a“参数,可以同时显示本地仓库和远程仓库的分支信息。
二、创建、切换分支
#git checkout -b branchname
创建并切换到新的分支branchname下,下列两条命令的作业和上面的相同,只是分步完成
#git branch branchname
#git checkout branchname
这两步,第一步为创建分支,第二步为切换到分支。
三、分支操作
分支进行文件修改,git add,git commit,不会影响主分支及其它分支。
四、切回上一分支
#git chechkout -
用于切回上一分支,类似返回操作
五、合并分支
#git merge --no-ff branchname
合并分支之前先切换至主干分支中,执行命令后会跳出编辑器,编辑器提示输入合并信息,其中包括一些默认信息,默认保存退出也可以,直接在下面添加描述文字也可以,不要用#开关,直接在最下面添加。描述会进入log日志。
--no-ff参数是阻止快进式合并,不加参数也可以合并,但效果类似于直接改变指针,分支的提交历史也会合并到主线。建议使用参数,这样可以保持两个分支各相对独立,互不影响。【不是很理解】
如果多个分支一个个合并至主分支,修改过同一个文件,会造成合并冲突,合并的结果是冲突文件会把两个分支的结果合并在一起并做出标记“=======”上下部分为两个分支的部分,手动修改后再执行git add及git commit操作,进行提交。
六、