1、下载git?
git-scm.com2、获取帮助git helpgit help config3、什么是Git?版本控制系统,Version Control System, VCS。它允许我们提交变化到源代码管理库,并且跟踪变化。允许develope在同一套代码库上协同工作。是现代的、分布式版本控制系统。4、一些关键词?BranchMergeCommit:发生在本地PushPull5、git的历史创建于2005年,一开始Linux kernel使用BitKeeper作为版本控制系统,后来Linus kernel和BitKeeper拆分,BitKeeper的拥有公司无法再提供免费服务,Linux需要一个新的版本控制系统替代BitKeeper,Linux的程序员们开始重造轮子,并在以后完善了社区,并诞生了GitHub.6、CVS和DVC?CVS是Centralized Version Control,程序员们向同一台中央服务器提交;DVC是Distributed Version Control,每个人都有自己的代码控制库,每次提交是提交到本地的,每次提交了一个新版本的代码,然后是push到远程。多人协作的一个场景:A和B协同工作,A把代码commit到本地,B直接从A的本地代码库pull,当A完成阶段工作,push到远程代码服务器,B现在可以从远程代码库pull代码了。7、一些命令?init,创建本地代码库status,本地代码库的状态,显示没有commit的变化add,把文件放到本地代码库commit,把变化提交到本地代码库log,显示提交的所有变化push,push所有的变化到远程代码服务器,还可以提交到多个地方pull,从远程代码服务器或其它代码库pull变化merge,合并变化8、git配置git config --global user.name "darren"git config --global user.email "764190362@qq.com"git config --global --list信息被存放在了管理员文件夹中的.gitconfig文件中,大致是:[user] name = darren email = 764190362@qq.comgit config --global core.editor note 使用哪个编辑器git config --global help.autocorrect 1 当出现错误命令会有提示git config --global color.ui auto 设置字体颜色等git config --glboal core.autocrlf false windows下推荐使用以上的设置是System级别的。还可以设置用户级别的,用户级别可以覆盖System级别。git config user.name "jack"用户级别移除设置:git config --unset core.autocrlf9、创建本地代码库, 追加文件, 提交变化→ 来到某个文件夹,打开命令行窗口→ 创建本地代码库git init→ 在文件夹内创建一个README.txt文件→ 查看本地代码库的状态git status红色字体表示没有被tracked的文件→ 把文件添加到本地代码库,使文件可以被trackgit add README.txtgit add -u 用来add刚被更新的文件,而不是刚添加的文件git add -A add所有文件到staging area被track等待被commit此时,再运行git status,README.txt变成绿色,说明已经被track→ commit变化git commit→ 查看历史git log10、历史版本和版本差异→ 查看历史版本git log→ 查看版本差异git diff dd6819..a15ec6→ 查看最近的历史版本git diff HEAD→ 查看最近的历史版本之前的版本git diff HEAD~1→ 查看最近历史版本和之前一个版本的差异git diff HEAD~1..HEAD也可以写成git diff HEAD~1..11、一次修改多次提交→ 假设修改了2个文件README.txtfile.txt→ 查看状态git status此时可以看到修改的文件呈红色状态。通常一次commit就好,但这里就分两次commit→ 第一次addgit add file.txt→ 第一次commitgit commit -m "blablabla"→ 第二次addgit add README.txt→ 第二次commitgit commit -m "second blablabla"12、删除文件→ 删除file.txt文件→ 查看状态git statusdeleted file.txt 并且是红色字体→ 把删除也放到staging areagit add -u→ 查看状态git statusdeleted: file.txt 并且是绿色字体→ commitgit commit -m "blablabla"也就是说,对于删除的文件,也需要使用git add -u,把删除的文件放在staging area。13、重命名文件→ 把file.txt重命名为newfilename.txt→ 查看状态git statusdeleted: file.txt 红色字体(被重命名的文件在git看来是deleted状态)nefilename.txt 红色字体(新的文件在git看来是一个untracked状态)→ 把deleted状态的文件和新文件放到staging area上去git add -A→ 查看状态git statusrenamed: file.txt → newfilename.txt 绿色字体(git 记录下了重命名过程)→ commit一下git commit -m "blablabla"14、撤销改变→ 修改某个文件,比如README.txt→ 查看状态git statusmodified: README.txt 红色字体→ 撤销修改git checkout README.txt15、撤销多个改变→ 修改某个文件,比如README.txt→ 删除某个文件,比如newfilename.txt→ 查看状态git statusmodified: README.txt 红色字体deletedL newfilename.txt 红色字体→ 撤销这2个改变git reset -hard→ 查看状态git status回到最近的一次HEAD16、删除文件→ 创建文件temp1.txttemp2.txt→ 查看状态git statustemp1.txt 红色字体temp2.txt 红色字体→ 删除文件git clean -f17、忽略文件→ 假设创建logs文件夹和线面的log.txt→ 查看状态git statuslogs/ 红色字体→ 创建.gitignore文件,内容如下:/logs/*.txt/logs/*.log→ 查看状态git status.gitignore 红色字体→ 把.gitignore文件放到staging areagit add .gitignore→ 提交git commit -m "Added .gitignore"18、拷贝远程网站到本地→ 拷贝git clone https://github.com/jquery/jquery.git→ 查看所有的提交git loggit log --oneline19、查看数据→ 查看总共多少次提交git log --oneline | wc -1→ 查看带图标git log --oneline --graph→ 查看哪些人提交了哪些git shortlog→ 查看哪些人以及邮件git shortlog -sne→ 查看更多比如在github网站上,有一个Graphs菜单,里面有更详尽的信息。20、查看提交→ 展示最后一次提交git show HEAD→ 展示倒数第二次提交git show HEAD~1→ 展示所有提交git log --oneline→ 展示最后10次变化git show HEAD~10→ 展示某一次提交git show 5642626→ 查看远程git remoteorigin 远程名称为origin的代码库→ 查看远程更多git remote -vorigin https://github.com/jquery/jquery.git(fetch)orgin https://github.com/jquery/jquery.git(push)21、Git Protocol● git支持http、https、git、ssh和file协议● http的默认端口是80,https的默认端口是443,可以设置● 对于比如说github上的网站,通常读取是自由的,但写通常需要密码● git protocolgit 9418 git://github.com/jquery/jquery.git● ssh protocolssh 22 git@github.com:jquery/jquery.git● file protocolfile n/a /Users/James/code/jquery22、查看分支和标签→ 查看本地分支git branch→ 查看远程分支git branc -r→ 查看taggit tag可以看到所有版本23、本地代码库复制到远程,在远程创建代码库→ 在本地代码库基础上创建远程代码库git remote add origin https://github.com/Darrenji/example.git24、从远程fetch→ fetchgit fetch把远程所有变化拉到本地→ fetch某个分支git fetch origin25、远程变化同步合并到本地→ 远程有一个变化,有可能是另外一个程序员提交→ 同步合并到本地git merge origin/master26、从远程拉→ 查看远程分支git branch -rorigin/master 红色字体→ 现在准备拉pull,pull等同于:git fetch; git merge origin/master→ 建立远程和本地的映射git branch --set-upstream master origin/master 第一个master是指本地→ 开始拉git pull27、推到远程→ 本地提交一些变化git commit -am "blabla"→ 推git push输入用户名输入密码当然还可以在推之前删除远程→ 删除远程git remote rm origin→ 列出远程git remote -v→ 重新创建一个SSH协议的远程git remote add origin git@github.com:Darren/Example.git→ 推git push注意:SSH协议这里使用SSH key进行认证用户28、创建标签→ 创建标签git tag v1.0git tag -a v1.0_with_messagegit tag -s v1.0_signed→ 列出所有标签git tag→ 列出某个标签git tag -v v1.0_signed29、把标签推到远程→ 默认情况下git不推标签git push --tags30、可视化分支→查看现有分支下的提交git log --graph --oneline→ 查看所有分支下的提交git log --graph --oneline --all --decorate--all所有分支--docorate比如HEAD,tag等还可以把以上的选项放到全局去并使用别名调用:→ 全局设置git config --global alias.lga "log --graph --oneline --all --decorate"→ 使用新的命令git lga31、创建本地分支→ 创建本地一个分支git branch feature1→ 跳转到feature1这个分支git checkout feature1→ 查看所有分支下的提交git log --graph --oneline --all --decorate32、分支和标签的区别branch会跟着commits,tag始终跟着一个commit。→ 创建一个分支并让它跟着一个commitgit branch fix1 974b56a→ 切换到fix1git checkout fix1→ 修改fix1下的某个文件→ 提交git commit -am "blabla"33、重命名和删除分支→ 重命名分支git branch -m fix1 bug1234→ 删除分支git branch -d bug1234→ 想git报告删除分支的事git branch -D bug1234→ 创建并切换到新创建的分支git checkout -b feature234、把删除的分支找回来→ 输入如下git reflog5a78c8b HEAD@{3}: commit: Fixed bug#1234→ 找回分支git branch bug1234 5a78c8b→ 切换到找回的分支git checkout bug1234→ 展示HEADgit show HEAD注意:commit保存期只有30天35、不提交变化隐藏变化→ 修改某个文件,比如README.txt→ 查看状态git statusmodified: README.txt 红色字体→ 隐藏变化git stash→ 查看隐藏的所有变化git stash list36、创建远程分支→ 推到远程的某个分支上git push origin master→ 把本地branch推到远程git push origin v1.0_fixes远程会多了一个分支→ 查看远程分支git branch -r37、删除远程分支→ 先推到远程分支git push origin v1.0_fixesgit push origin v1.0_fixes:v1.0_fixes_remote_branch_name(远程和本地分支名称不一样)→ 删除远程分支git push origin:v1.0_fixes_remote_branch_name38、git网站设置通常在git网站,比如github, coding.net都会有一些基本设置的地方。========最近又作了一些git的练习,整理在下面====================================================1、Repository包含什么
文件、历史记录、配置文件2、git repository的3个状态● working directory:通常有一个隐藏的.git文件● staging area:也叫git index● commit3、master branch8d976fa→626968e→65a7416→a877955→1bf9179默认的brach叫master4、Windows安装gitgit-for-windows.github.io安装完后打开git bash,输入:git version5、简单使用→ 在github上创建一个new repository→ 创建目录mkdir projects→ 导航到目录cd projects/→ 全局配置git config --global user.name ""git config --global user.email ""git config --global --list→ 复制远程git repository的地址→ 复制到本地git clone https://github.com/demo/demo.git→ 查看本地repository的状态git status一般是On branch master,默认显示名称为master的这个branch→ 创建文件echo "some words" >> start.text→ 查看文件列表ls→ 显示文件cat start.txt→ 查看状态git statusstart.txt为红色字体,表示untracked file,也就是说在working directory,还没有在staging area→ 放到staging area中去git add start.txt→ 查看状态git statusstart.txt为绿色字体,表示已经在staging area中了→ 提交git commit -m "adding start txt file"→ 提交到远程git push origin master远程的名称是origin,在从远处拷贝过来的时候默认就是这个名称master是默认的远程分支6、从本地的一个空目录开始→ 创建一个目录→ 初始化并创建一个git目录git init fresh-project→ 来到刚创建的fresh-project,查看所有文件,包括隐藏文件ls -al发现有一个.git目录→ 来到.git目录,查看branches/→ 来到fresh-project目录,查看状态git statusOn branch master告诉我们目前在master这个branch上,我们是可以创建其它branch的→ 创建一个新文件hipster.txt→ 查看状态git statushipster.txt为红色字体,表示这个是untracked file→ 放到staging area中去git add hipster.txt→ 查看状态git statusnew file: hperster.txt 绿色字体→ 提交git commit -m ""[master (root-commit) a7781a] ..., root-commit表示是第一次提交7、从本地的一个已有项目开始→ 下载一个示例项目http://initializr.com→ 比如下载项目在一个名称为web-project的目录中→ 来到web-project目录下git init→ 查看列表,包括隐藏文件ls al.git/目录存在着→ 查看状态git statusOn Branch master→ 把所有文件放到staging areagit add .→ 提交变化git commit -m ""8、从远程的一个git项目开始→ 远程的git项目https://githbu.com/scm-ninja/starter-web→ 点击Fork按钮把项目加入到自己的github账户下→ 复制https url→ 拷贝到本地git clone https://github.com/somename/starter-web.git9、简单使用add, commit, pull, push→ 本地一个git目录→ 创建一个新文件hipster.txt→ 查看状态git statushipster.txt红色字体→ addgit add hipster.txt→ commitgit commit -m ""[master ba5b0f0],master是默认的分支,ba5b0f0是SHA-1,用来标记每一次提交→ 从远程拉取git pull origin master强烈推荐养成的习惯:commit之后,先pull,再push→ 推到远程git push origin master5c05047..ba5b0f0 master → master, 表示从本地的master默认分支推送到远程的master分支10、git的tracking files→ 输入如下查看git repository tracking的所有文件git ls-files→ 把多个修改放到staging areagit add .11、回滚提交的变化→ 从staging area中移除git reset HEAD level1-file.txt→ 回滚git checkout -- level1-file.txt12、重命名文件→ 重命名,比如把level3-file.txt重命名为level3.txt,使用git的重命名命令git mv level3-file.txt leve3-file.txt→ 查看状态git statusrenamed: level3-file.txt → level3.txt,绿色字体也就是重命名后,依然在staging area,不需要重新add→ 提交变化git commit -m ""→如果使用操作系统的命令,重命名某个文件mv level2-file.txt leve2.txt→ 查看状态git statusdeleted: level1-file.txt 红色字体level2.txt 红色字体说明档使用操作系统的命令,会删除原先的,并且创建一个新的,并且被删除的和新建的都不在staging arean→ addgit add -A→ 提交变化移动文件也是相似的道理。13、移除文件→ 创建一个文件doomed.txt→ git statusdoomed.txt红色字体→ 使用git命令移除git rm doomed.txt提示无法移除,因为还没有tracking这个文件呢→ 那就使用操作系统命令删除rm doomed.txt→ ls没有→ git status也没有也就是说,刚创建的文件没有被tracking,使用操作系统的删除命令是可以的如果删除一个被tracking的文件呢?→ 查看所有正在被tracking的文件git ls-files比如有一个newfile.txt文件→ 使用git命令删除git rm newfile.txt→ 使用ls命令,已不再目录中→ 使用git statusdeleted: newfile.txt 绿色字体→ git commit -m "",也就是让repository知道这个文件已被删除→ 使用git status没有也就是说,使用git的rm命令删除staging area中的文件,也是物理删除,执行命令后必须告诉或同步到repository,commit一下tracking中的文件被删除,如何回滚呢?→ 查看所有正在被tracking的文件git ls-files比如有一个hipster.txt文件→ 使用git命令删除tracking的文件git rm hipster.txt→ ls发现不在目录中了→ git statusdeleted: hipster.txt 绿色字体,说明这个文件也在staging area了,对git来说,这个文件还没有被真正删除→ 此时想把这个文件从staging area中拉出来git reset HEAD hipster.txt→ ls依然不在目录中→ git statusdeleted: hipster.txt 红色字体,说明这个文件依然被track,但在目录中已经不存在。注意从staging area中拉出来和是否是tracking是两码事。→ 回滚git checkout -- hipster.txt注意:如果我们想回滚,先必须使用reset HEAD命令把文件从staging area中拉出来→ ls目录中存在文件,git status发现文件不再被track如何删除目录呢?→ 比如有一个目录是level1→ rm -rf level1→ ls查看,目录已经没有→ git statusdeleted: leve1/leve1.txt 红色字体deleted: leve11/level2/level2.txt 红色字体deleted: level1/level2/level1/level3.txt 红色字体level1以及子目录都标记为删除,还在track状态,但并不在staging area中→ git add -Adeleted: leve1/leve1.txt 绿色字体deleted: leve11/level2/level2.txt 绿色字体deleted: level1/level2/level1/level3.txt 绿色字体在track状态,并且在staging area了,准备提交→ 提交变化14、git历史记录→ 查看语法git help log→ git log查看到所有的提交记录→ git log --abbrev-commit查看精简的commit编号→ git log --oneline --graph --decorated→ git log ae6f872...761b911→ git log --sicne="3 days ago"→ 查看某个文件的历史记录git log -- hopster.txt→ git log --follow -- level1/level2/level3→ 查看某次提交git show b19...15、别名→ 比如本来查看历史记录的这样写git log --all --graph --decorate --oneline可不可以写成 git hist来得到相同的结果呢?→ 在全局配置git config --global alias.hist "log --all --graph --decorate --oneline"→ 使用别名命令git hist→ 如何修改别名命令呢实际上是存在在.gitconfig文件中,类似:[alias]hist = log --all --graph --decorate --oneline16、忽略不必要的文件→ 存放在哪里呢.gitignore→ git add .gitignore→ git statusnew file: .gitignore→ git commit -m ""→ 来到.gitignore文件*.log17、推送→ 先拉取git pull origin master→ 再推送git push origin master