git学习笔记

1.git基本概念理解

git是分布式版本控制系统,适合于多用户合作开发。git系统的管理是以仓库为单位的,对于每一个项目,我们可以建立相应的仓库,当然一个仓库下也可以保存多个项目。仓库有本地仓库和远程仓库。

本地仓库:每个开发者在个人计算机上创建的仓库,开发者进行的所有修改、提交等操作都在本地仓库进行。本地操作可离线进行,本地更新不影响远程仓库。

远程仓库:在服务器端的仓库,只是本地仓库在远程服务器上的一个复制,所有人可见,本地提交可以同步到远程仓库,类似于将本地文件上传到网盘中一般,但是不是上传新文件覆盖旧文件那么简单。

文件状态:在git中,文件有四种状态(git book上说有三种状态,个人理解,所有文件按四种状态分类更合适一点):untrackedmodified, stagedcommitted.

statusdescription
untracked新建文件或者拷贝新文件到git控制目录时,新文件会被git认定为untracked
modified修改文件后,文件状态变为modified。同样使用git add <file>将文件添加到stage区
stagedstage区中的文件,是即将提交的版本修改
committed新版本文件已经提交到仓库

状态切换:对于untrackedmodified文件可以使用git add <file>将文件添加到git仓库stage区,使其状态变为stagedgit commit命令可以将文件提交到仓库,使其状态变为committed

commit:每一次commit其实都生成了一个新的版本,不同于某些增量式系统,每有一个新的版本出现,git都会创建一个新版的snapshot,并且生成一个对应的hash码。commit命令会生成一个实体,包含一个hash码,一个指向前一次commit实体的指针,和指向新版本的snapshot的指针。

branch:分支实际上是一个指针,指向某一个commit。创建一个分支意味着新的版本从主线中分离出来,分支版本开发完毕后可以与主线合并。可以将分支理解为不同的开发方向。

2.配置git,本地仓库与远程仓库

2.1 配置git

第一次安装git时需要对其进行配置,使用过程中也可以更改这些配置。使用git config命令可以进行配置。使用该命令配置后的参数存放在三个位置

  • /etc/gitconfig为系统配置(windows下为C:\Documents and Settings\All Users\Application Data\Git\config)。可为git config命令传递--system参数设置。
  • ~/.gitconfig or ~/.config/git/config为用户配置(windows下为C:\Users\$USER\.gitconfig)。可为git config命令传递--global参数设置。
  • .git/config文件,在当前工作空间目录下。为单个项目所配置,仅在该工作空间下有效。可为git config命令传递--local参数设置。
git config --global user.name "name"			#设置用户名
git config --global user.email mail@example.com		#email address
git config --global core.editor emacs			#设置默认编辑器
git config --list					#查看设置
git config user.name					#只查看用户名,查看其他配置同理

2.2 创建仓库

创建本地仓库有两种方式:直接在本地创建和从远程克隆一个仓库到本地。

  • 直接在本地创建
git init 	#从本地创建一个仓库
  • 从远程仓库克隆
git clone url 	#从url指向的地址处克隆一个远程仓库到本地

创建远程仓库可以选择相应的托管网站建立,详见各托管网站。

2.3 本地仓库链接到远程仓库

如果是直接从本地创建仓库,使用dit remote add命令链接到远程仓库

git remote add name url 	#链接到url指向的远程仓库,并命名为name

如果使用git clone命令,则自动链接到远程仓库,并为远程仓库取名origin
链接到远程仓库之后,可以将远程仓库和本地仓库同步。先使用git pull remote locate从remote同步数据到locate并合并。然后可以使用git push remote locate将本地locate数据同步到远程仓库remote。如果是使用git clone命令创建的本地仓库,则无需先从远程同步数据到本地。

3.基本操作

3.1 查看文件状态

显示目录下文件状态信息

git status
git status -s		# 获取文件简略状态信息
git status –short	# 获取文件简略状态信息

git status只是列出文件状态,一般只显示哪些文件被修改了,哪些文件在stage区还未提交,哪些文件是untracked。若想查看当前文件的具体变化,使用git diff

git diff file		#比较staged文件和当前目录下文件的不同,详细列出更改的地方
git diff –staged	#列出staged 文件和committed文件的变化

3.2 更改文件状态

文件修改后,文件状态会变为modified,将修改的文件或为跟踪的文件添加到stage区,使用下述命令后文件状态变为staged

git add files

将staged文件提交到仓库

git commit -m "comments"	#带注释信息的提交
git commit -a			#将所有修改过的文件提交到仓库,不要求使用git add将其添加到stage区。但是这可能会将不必要的修改提交。
git commit –amend 		#如果将staged文件提交了但是发现还有文件没有在staged区也需要提交,并且应该与前一次提交合并进行,那么将这些文件添加到staged区,该命令将补充提交到最近的一次提交中。

重命名文件

git mv from to	#与下列三条命令等价
mv from to;
git rm from;
git add to

删除文件

git rm files
git rm -f files		#强制删除,这两条命令都是从硬盘上删除文件
git rm –cached files	#删除staged文件,文件依然在硬盘上,但是变untracked

staged文件变为unstaged

git reset HEAD files

将修改的文件改回到修改之前

git checkout – files

3.3 git日志

查看git日志

git log				#列出提交日志,默认按时间排序
git log –graph			#以ASCII graph显示结果
git log --pretty=parameter	#使用parameter控制输出格式
git log --patch/-p		#列出每次提交所引入的变化
git log	--stat			#列出每次提交的的详细改变
git log	--since			#限制只输出某一时间之后的提交
git log	--until			#限制只输出某一时间之前的提交
git log	--author		#过滤输出某一作者的提交
git log	--grep			#只输出包含某个字符串的提交

3.4 git remote

将本地仓库链接到远程仓库命令为git remote add,详细使用见第2节。
重命名远程仓库

git remote rename old_name new_name

删除远程仓库

git remote remove <remote>
git remote rm <remote>

监测远程仓库

git remote show <remote>

从远程仓库下载数据到本地仓库,只下载数据不与当前本地仓库合并。

git fetch <remote> 

从远程仓库下载数据自动与本地仓库数据合并。

git pull <remote> <locate>

本地仓库branch所指向数据上传到远程仓库

git push <remote> <branch> 

3.5 git tag

git中为了标记某些关键开发版本,可以针对相应版本建立标签,git标签分为两种:lightweight tag & annotated tag.
lightweight tag只是一个指针指向某一个提交。
annotated tag却包含tag name, email, date, tagging message等。
列出所有tag

git tag

创建tag

git tag -a <version> -m "comments"	#创建annotated tag
git tag <version>			# 创建lightweight tag

创建后续补偿tag, 当想为某一次过去的提交创建tag时,可以使用如下命令

git tag -a <version> sha-code		#sha-code是某一个提交版本的sha-1 hash码

将tag上传到远程仓库,git默认是不上传tag的

git push <remote> <tagname>
git push <remote> --tags		#一次上传多个tags

删除tag

git tag -d <tagname>

3.6 git别名

如果输入命令时只输入部分,git不会推测命令的意思,有些命令比较长,不想输入完整部分时,可以为某些命令建立一个短的别名代替,代码格式为

git config --global alias.rename command

例如

git config --global alias.ci commit
git ci		#与git commit相同

4.Branch

git中branch是指向某一个commit的可移动指针。

branch相关操作命令
ordercommandsdescription
1git branch <branch>创建一个新的branch
2git branch查看当前已有branch
3git branch -v查看当前已有branch并列出最后一次commit信息
4git branch --merged查看已经合并的branch
5git branch --no-merged查看未合并的branch
6git branch -d <branch>删除branch
7git checkout <branch>切换branch
8git chackout -b <branch>创建branch并切换到该branch,等同于git branch&git checkout
9git remote show [remote]列出远程branch
10git ls-remote [remote]同上
11git checkout --track origin/serverfix设置当前branch跟踪远程origin下的 branch serverfix
12git checkout serverfix如果本地不存在branch serverfix并且远程刚好存在该branch,则创建一个branch跟踪远程branch serverfix
13git checkout -b sf origin/serverfix更改使得branch sf跟踪远程origin/serverfix branch
14git branch -u origin/serverfix将当前跟踪的branch更改为origin/serverfix
15git push <remote> --delete <branch>删除远程branch
16git branch -vv查看设置的所有跟踪的branches

开始用git管理代码,阅读Pro Git过程中的一些笔记,暂时只写这么多,后续使用学到新的内容再补充。欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值