git的几十个基本面

 

一、下载git?
git-scm.com

二、获取帮助
git help
git help config

三、什么是Git?
版本控制系统,Version Control System, VCS。它容许咱们提交变化到源代码管理库,而且跟踪变化。容许develope在同一套代码库上协同工做。是现代的、分布式版本控制系统。

四、一些关键词?
Branch
Merge
Commit:发生在本地
Push
Pull

五、git的历史
建立于2005年,一开始Linux kernel使用BitKeeper做为版本控制系统,后来Linus kernel和BitKeeper拆分,BitKeeper的拥有公司没法再提供免费服务,Linux须要一个新的版本控制系统替代BitKeeper,Linux的程序员们开始重造轮子,并在之后完善了社区,并诞生了GitHub.

六、CVS和DVC?
CVS是Centralized Version Control,程序员们向同一台中央服务器提交;DVC是Distributed Version Control,每一个人都有本身的代码控制库,每次提交是提交到本地的,每次提交了一个新版本的代码,而后是push到远程。多人协做的一个场景:A和B协同工做,A把代码commit到本地,B直接从A的本地代码库pull,当A完成阶段工做,push到远程代码服务器,B如今能够从远程代码库pull代码了。

七、一些命令?
init,建立本地代码库
status,本地代码库的状态,显示没有commit的变化
add,把文件放到本地代码库
commit,把变化提交到本地代码库
log,显示提交的全部变化
push,push全部的变化到远程代码服务器,还能够提交到多个地方
pull,从远程代码服务器或其它代码库pull变化
merge,合并变化

八、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.com

git 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.autocrlf

九、建立本地代码库, 追加文件, 提交变化

→ 来到某个文件夹,打开命令行窗口
→ 建立本地代码库
git init
→ 在文件夹内建立一个README.txt文件
→ 查看本地代码库的状态
git status
红色字体表示没有被tracked的文件
→ 把文件添加到本地代码库,使文件能够被track
git add README.txt
git add -u 用来add刚被更新的文件,而不是刚添加的文件
git add -A add全部文件到staging area被track等待被commit
此时,再运行git status,README.txt变成绿色,说明已经被track
→ commit变化
git commit
→ 查看历史
git log

十、历史版本和版本差别

→ 查看历史版本
git log
→ 查看版本差别
git diff dd6819..a15ec6
→ 查看最近的历史版本
git diff HEAD
→ 查看最近的历史版本以前的版本
git diff HEAD~1
→ 查看最近历史版本和以前一个版本的差别
git diff HEAD~1..HEAD
也能够写成
git diff HEAD~1..

十一、一次修改屡次提交

→ 假设修改了2个文件
README.txt
file.txt
→ 查看状态
git status
此时能够看到修改的文件呈红色状态。一般一次commit就好,但这里就分两次commit
→ 第一次add
git add file.txt
→ 第一次commit
git commit -m "blablabla"
→ 第二次add
git add README.txt
→ 第二次commit
git commit -m "second blablabla"

十二、删除文件
→ 删除file.txt文件
→ 查看状态
git status
deleted file.txt 而且是红色字体
→ 把删除也放到staging area
git add -u
→ 查看状态
git status
deleted: file.txt 而且是绿色字体
→ commit
git commit -m "blablabla"

也就是说,对于删除的文件,也须要使用git add -u,把删除的文件放在staging area。

1三、重命名文件
→ 把file.txt重命名为newfilename.txt
→ 查看状态
git status
deleted: file.txt 红色字体(被重命名的文件在git看来是deleted状态)
nefilename.txt 红色字体(新的文件在git看来是一个untracked状态)
→ 把deleted状态的文件和新文件放到staging area上去
git add -A
→ 查看状态
git status
renamed: file.txt → newfilename.txt 绿色字体(git 记录下了重命名过程)
→ commit一下
git commit -m "blablabla"

1四、撤销改变
→ 修改某个文件,好比README.txt
→ 查看状态
git status
modified: README.txt 红色字体
→ 撤销修改
git checkout README.txt

1五、撤销多个改变
→ 修改某个文件,好比README.txt
→ 删除某个文件,好比newfilename.txt
→ 查看状态
git status
modified: README.txt 红色字体
deletedL newfilename.txt 红色字体
→ 撤销这2个改变
git reset -hard
→ 查看状态
git status
回到最近的一次HEAD

1六、删除文件
→ 建立文件
temp1.txt
temp2.txt
→ 查看状态
git status
temp1.txt 红色字体
temp2.txt 红色字体
→ 删除文件
git clean -f

1七、忽略文件
→ 假设建立logs文件夹和线面的log.txt
→ 查看状态
git status
logs/ 红色字体
→ 建立.gitignore文件,内容以下:
/logs/*.txt
/logs/*.log
→ 查看状态
git status
.gitignore 红色字体
→ 把.gitignore文件放到staging area
git add .gitignore
→ 提交
git commit -m "Added .gitignore"

1八、拷贝远程网站到本地
→ 拷贝
git clone https://github.com/jquery/jquery.git
→ 查看全部的提交
git log
git log --oneline

1九、查看数据
→ 查看总共多少次提交
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 remote
origin 远程名称为origin的代码库
→ 查看远程更多
git remote -v
origin https://github.com/jquery/jquery.git(fetch)
orgin https://github.com/jquery/jquery.git(push)

2一、Git Protocol

● git支持http、https、git、ssh和file协议
● http的默认端口是80,https的默认端口是443,能够设置
● 对于好比说github上的网站,一般读取是自由的,但写一般须要密码
● git protocol
git 9418 git://github.com/jquery/jquery.git
● ssh protocol
ssh 22 git@github.com:jquery/jquery.git
● file protocol
file n/a /Users/James/code/jquery

2二、查看分支和标签
→ 查看本地分支
git branch
→ 查看远程分支
git branc -r
→ 查看tag
git tag
能够看到全部版本

2三、本地代码库复制到远程,在远程建立代码库
→ 在本地代码库基础上建立远程代码库
git remote add origin https://github.com/Darrenji/example.git

2四、从远程fetch
→ fetch
git fetch
把远程全部变化拉到本地
→ fetch某个分支
git fetch origin

2五、远程变化同步合并到本地
→ 远程有一个变化,有多是另一个程序员提交
→ 同步合并到本地
git merge origin/master

2六、从远程拉
→ 查看远程分支
git branch -r
origin/master 红色字体
→ 如今准备拉pull,pull等同于:git fetch; git merge origin/master
→ 创建远程和本地的映射
git branch --set-upstream master origin/master 第一个master是指本地
→ 开始拉
git pull

2七、推到远程
→ 本地提交一些变化
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进行认证用户

2八、建立标签
→ 建立标签
git tag v1.0
git tag -a v1.0_with_message
git tag -s v1.0_signed
→ 列出全部标签
git tag
→ 列出某个标签
git tag -v v1.0_signed

2九、把标签推到远程
→ 默认状况下git不推标签
git push --tags

30、可视化分支
→查看现有分支下的提交
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 lga

3一、建立本地分支
→ 建立本地一个分支
git branch feature1
→ 跳转到feature1这个分支
git checkout feature1
→ 查看全部分支下的提交
git log --graph --oneline --all --decorate

3二、分支和标签的区别
branch会跟着commits,tag始终跟着一个commit。

→ 建立一个分支并让它跟着一个commit
git branch fix1 974b56a
→ 切换到fix1
git checkout fix1
→ 修改fix1下的某个文件
→ 提交
git commit -am "blabla"

3三、重命名和删除分支
→ 重命名分支
git branch -m fix1 bug1234
→ 删除分支
git branch -d bug1234
→ 想git报告删除分支的事
git branch -D bug1234
→ 建立并切换到新建立的分支
git checkout -b feature2

3四、把删除的分支找回来
→ 输入以下
git reflog

5a78c8b HEAD@{3}: commit: Fixed bug#1234
→ 找回分支
git branch bug1234 5a78c8b
→ 切换到找回的分支
git checkout bug1234
→ 展现HEAD
git show HEAD

注意:commit保存期只有30天

3五、不提交变化隐藏变化
→ 修改某个文件,好比README.txt
→ 查看状态
git status
modified: README.txt 红色字体
→ 隐藏变化
git stash
→ 查看隐藏的全部变化
git stash list

3六、建立远程分支
→ 推到远程的某个分支上
git push origin master
→ 把本地branch推到远程
git push origin v1.0_fixes
远程会多了一个分支
→ 查看远程分支
git branch -r

3七、删除远程分支
→ 先推到远程分支
git push origin v1.0_fixes
git push origin v1.0_fixes:v1.0_fixes_remote_branch_name(远程和本地分支名称不同)
→ 删除远程分支
git push origin:v1.0_fixes_remote_branch_name

3八、git网站设置
一般在git网站,好比github, coding.net都会有一些基本设置的地方。

========最近又做了一些git的练习,整理在下面====================================================

jquery

一、Repository包含什么

文件、历史记录、配置文件

二、git repository的3个状态

● working directory:一般有一个隐藏的.git文件
● staging area:也叫git index
● commit

三、master branch

8d976fa→626968e→65a7416→a877955→1bf9179
默认的brach叫master

四、Windows安装git

git-for-windows.github.io
安装完后打开git bash,输入:git version

五、简单使用

→ 在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 status
start.txt为红色字体,表示untracked file,也就是说在working directory,尚未在staging area
→ 放到staging area中去
git add start.txt
→ 查看状态
git status
start.txt为绿色字体,表示已经在staging area中了
→ 提交
git commit -m "adding start txt file"
→ 提交到远程
git push origin master
远程的名称是origin,在从远处拷贝过来的时候默认就是这个名称
master是默认的远程分支

六、从本地的一个空目录开始

→ 建立一个目录
→ 初始化并建立一个git目录
git init fresh-project
→ 来到刚建立的fresh-project,查看全部文件,包括隐藏文件
ls -al
发现有一个.git目录
→ 来到.git目录,查看
branches/
→ 来到fresh-project目录,查看状态
git status
On branch master告诉咱们目前在master这个branch上,咱们是能够建立其它branch的
→ 建立一个新文件hipster.txt
→ 查看状态
git status
hipster.txt为红色字体,表示这个是untracked file
→ 放到staging area中去
git add hipster.txt
→ 查看状态
git status
new file: hperster.txt 绿色字体
→ 提交
git commit -m ""
[master (root-commit) a7781a] ..., root-commit表示是第一次提交

七、从本地的一个已有项目开始

→ 下载一个示例项目
http://initializr.com
→ 好比下载项目在一个名称为web-project的目录中
→ 来到web-project目录下
git init
→ 查看列表,包括隐藏文件
ls al
.git/目录存在着
→ 查看状态
git status
On Branch master
→ 把全部文件放到staging area
git add .
→ 提交变化
git commit -m ""

八、从远程的一个git项目开始

→ 远程的git项目
https://githbu.com/scm-ninja/starter-web
→ 点击Fork按钮把项目加入到本身的github帐户下
→ 复制https url
→ 拷贝到本地
git clone https://github.com/somename/starter-web.git

九、简单使用add, commit, pull, push

→ 本地一个git目录
→ 建立一个新文件hipster.txt
→ 查看状态
git status
hipster.txt红色字体
→ add
git add hipster.txt
→ commit
git commit -m ""
[master ba5b0f0],master是默认的分支,ba5b0f0是SHA-1,用来标记每一次提交
→ 从远程拉取
git pull origin master
强烈推荐养成的习惯:commit以后,先pull,再push
→ 推到远程
git push origin master
5c05047..ba5b0f0 master → master, 表示从本地的master默认分支推送到远程的master分支

十、git的tracking files

→ 输入以下查看git repository tracking的全部文件
git ls-files
→ 把多个修改放到staging area
git add .


十一、回滚提交的变化

→ 从staging area中移除
git reset HEAD level1-file.txt
→ 回滚
git checkout -- level1-file.txt

十二、重命名文件

→ 重命名,好比把level3-file.txt重命名为level3.txt,使用git的重命名命令
git mv level3-file.txt leve3-file.txt
→ 查看状态
git status
renamed: level3-file.txt → level3.txt,绿色字体
也就是重命名后,依然在staging area,不须要从新add
→ 提交变化
git commit -m ""


→若是使用操做系统的命令,重命名某个文件
mv level2-file.txt leve2.txt
→ 查看状态
git status
deleted: level1-file.txt 红色字体
level2.txt 红色字体
说明档使用操做系统的命令,会删除原先的,而且建立一个新的,而且被删除的和新建的都不在staging arean
→ add
git add -A
→ 提交变化

移动文件也是类似的道理。

1三、移除文件

→ 建立一个文件doomed.txt
→ git status
doomed.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 status
deleted: 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 status
deleted: hipster.txt 绿色字体,说明这个文件也在staging area了,对git来讲,这个文件尚未被真正删除
→ 此时想把这个文件从staging area中拉出来
git reset HEAD hipster.txt
→ ls
依然不在目录中
→ git status
deleted: hipster.txt 红色字体,说明这个文件依然被track,但在目录中已经不存在。注意从staging area中拉出来和是不是tracking是两码事。
→ 回滚
git checkout -- hipster.txt

注意:若是咱们想回滚,先必须使用reset HEAD命令把文件从staging area中拉出来
→ ls目录中存在文件,git status发现文件再也不被track

如何删除目录呢?

→ 好比有一个目录是level1
→ rm -rf level1
→ ls查看,目录已经没有
→ git status
deleted: leve1/leve1.txt 红色字体
deleted: leve11/level2/level2.txt 红色字体
deleted: level1/level2/level1/level3.txt 红色字体

level1以及子目录都标记为删除,还在track状态,但并不在staging area中
→ git add -A

deleted: leve1/leve1.txt 绿色字体
deleted: leve11/level2/level2.txt 绿色字体
deleted: level1/level2/level1/level3.txt 绿色字体

在track状态,而且在staging area了,准备提交
→ 提交变化

1四、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...

1五、别名

→ 好比原本查看历史记录的这样写
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 --oneline

1六、忽略没必要要的文件

→ 存放在哪里呢
.gitignore
→ git add .gitignore
→ git status
new file: .gitignore
→ git commit -m ""
→ 来到.gitignore文件
*.log

1七、推送
→ 先拉取
git pull origin master
→ 再推送
git push origin master

git

相关文章
相关标签/搜索