1. git工作机制介绍
1、git工作流程
- 从远程仓库克隆代码到本地仓库
- 从本地仓库中checkout代码然后进行代码修改
- 在提交代码前先将代码提交到暂存区
- 提交到本地仓库,本地仓库中保存修改的各个历史版本
- 修改完成后,将代码push到远程仓库和团队共享代码
2、git的版本库、工作目录、暂存区
版本库:仓库中的.git隐藏文件夹就是版本库,其中储存了配置信息、日志文件和文件版本信息等
工作目录:包含.git文件夹的目录就是工作目录,主要用于存放开发代码
暂存区:.git目录下的index文件就是暂存区,也叫stage,暂存区是一个临时保存修改文件的二进制文件。
3、工作目录下的文件状态
- untracked未跟踪(未纳入版本控制)
- tracked已跟踪(被纳入版本控制)
- Unmodified未修改状态
- Modified已修改状态
- Staged已暂存状态
2. git常用命令
-
设置”用户名“和”email“
新安装好git后需要进行用户名和email设置,Git每次提交都会使用该用户信息。
# 设置用户信息 git config --global user.name "userName" git config --global user.email "email" # 查看设置好的配置信息 git config --list fit config user.name # 通过命令设置的用户信息会保存在~/.gitconfig文件中
-
获取git仓库
# 1.在本地初始化一个git仓库 # 新建本地仓库目录,在git bash中输入命令,初始化后生成.git的隐藏文件 git init # 2.通过远程仓库clone一个git仓库 git clone <url>
-
本地仓库操作
# 1.查看当前分支信息、文件状态 git status git status -s #查看信息更简洁 M:代表已修改的文件 D:代表已删除的文件 ??:代表未跟踪的文件 A:代表添加到暂存区的文件 # 2.文件加入暂存区 git add <filename> #添加文件到暂存 git reset HEAD <filename> #取消暂存区文件 # 3.提交暂存区文件到本地仓库 git commit -m "日志信息" #会将暂存区文件一次性提交到本地仓库 git commit #如果没有-m会默认打开一个vim编辑器输入日志信息 # -a参数:如果使用-a,会将修改过的所有文件直接添加到本地库,而不需要git add命令添加到暂存区 # 4.删除文件 git rm 文件名 # 注意点: # git rm命令删除的工作区中文件,本地仓库中仍然有该文件,需要使用git commit才能同步删除本地仓库中文件 # git rm命令删除文件后,会默认将该文件添加到暂存区;而直接在目录中delete文件并不会添加文件到暂存区,因此不能直接使用commit命令同步本地仓库,如果使用delete删除文件后,需要先使用git add命令将该文件添加到暂存区,在使用git commit提交到本地仓库 # 5.忽略列表 在工作目录下面创建名为.gitignore文件(在git bash中输入touch .gitignore创建),并在其中添加无需纳入Git管理的文件 *.a # 所有的.a结尾文件 !lib.a # 除了lib.a外的.a文件 /TODO # 忽略TODO目录 build/ # 忽略build/下的文件 doc/**/*.pdf #忽略doc/directory/下的所有.pdf文件 # 6.查看操作日志记录 git log
-
远程操作命令
# 1.查看远程仓库 git remote #列出每一个远程服务器简写,至少有一个origin(git仓库服务器的默认名字) git remote -v #列出服务器的信息更详细 git remote show origin #查看origin服务器的详细信息(分支信息) # 2.添加远程仓库 git remote add <shortname> <url> #shortname为远程服务器名称,一般为origin;本地仓库可以对应多个远程仓库 # 3.clone远程仓库 git clone <url> #拷贝一份已经存在的远程git仓库,默认配置下Git仓库中的每一个文件的每一个版本都会被拉取下来 # 4.移除远程仓库 git remote rm <远程服务器名> #移除本地远程仓库的记录 # 5.从远程仓库抓取 git fetch #从远程仓库获取最新版本到本地仓库中的.git/object目录下,不会自动merge到本地仓库 git fetch origin master #指定远程仓库获取最新版本 git merge origin/master #将本地origin/master分支文件合并到工作区 # 6.从远程仓库拉取(自动merge) git pull #从远程仓库获取最新版本并mmerge到本地仓库 git pull origin master #指定拉取的远程仓库 # 注意 # 如果工作区中有未被跟踪的文件,而远程中也有同名文件,git pull拉取后不会自动merge,而是需要先处理未跟踪的同名文件,再手动git merge # 如果是本地新创建的仓库,并且仓库中存在文件,再从远程仓库中拉取文件会报错:refusing to merge unrelated histories,此时需要在git pull命令后加入参数--allow-unrelated-histories # 7.推送代码到远程 git push [remote-name] [branch-name] #推送本地branch_name中代码到远程仓库 # 注意推送的内容都是添加到本地仓库的内容
-
分支操作
# 1.查看分支 git branch #列出所有本地分支 git branch -r #列出所有远程分支,远程分支以(remote/)开头 git branch -a #列出所有本地和远程分支 # 2.创建分支 git branch [branch_name] #创建本地分支 # 3.切换分支 git checkout [branch_name] #切换到指定分支,切换后本地目录下文件也会对应修改 # 4.推送至远程仓库分支 git push [origin_name] [branch_name] #branch_name为要push的本地分支 # 5.合并分支 git merge [branch_name] #合并指定branch_name分支到当前分支 # 冲突处理 # 如果在两个不同分支中对同一个文件都进行了不同的修改,在使用git merge后会提示冲突,此时需要手动打开文件处理冲突的内容,并将修改后的文件使用git add标识冲突已修改,最后使用git commit提交文件 # 6.删除分支 git branch -d [branch_name] #删除branch_name分支 git push origin -d [branch_name] #删除远程仓库中的branch_name分支 # 对于分支中进行了一些开发动作,并且没有merge或者push到远程的分支,需要使用-D命令强制删除分支 git branch -D [branch_name]
-
Git标签操作
Git可以给某个分支某个特定时间点的commit状态打上标签,表示重要节点。利用标签,可以很方便的切换到标记时commit的状态(需要和branch一起使用)。
比较有代表性的标签用法为:使用标签来标记发布节点(v1.0、v2.0)等。
# 1.列出已有标签 git tag #列出所有tag git show [tag_name] #查看指定tag的信息 # 2.创建新标签 git tag [tag_name] #创建tag_name的标签,该标签指向当前branch最新的commit git tag -a [tag_name] -m "messiage" #创建带备注信息的标签 git tag [tag_name] [commit_id] #为指定的提交版本(commit_id取前几位即可)打标签,commit_id可以使用git log --pretty=oneline查看所有分支的提交历史和commit_id # 3.将标签推送至远程仓库 #默认git push推送代码时并不会推送tag,因此必须显性地推送标签到服务器 git push [remote] [tag_name] #将标签tag_name推送至远程 git push [remote] --tags #一次性推送本地所有标签 # 4.检出标签 #使用branch和tag配合使用,来检出标签对应状态的分支版本,在使用该命令前,需要已经使用git tag [tag_name]为特定的commit创建好标签 git checkout -b [branch][tag_name] #根据tag_name标定的节点创建一个新的branch,如git checkout -b dev v1.0 根据v1.0标签创建一个dev分支 # 5.删除标签 git tag -d [tag_name] #删除本地tag_name标签 git push origin :refs/tags/[tag_name] #删除远程标签
3. TortoiseGit工具使用
-
文件状态图标
文件上的图标,可以反映出当前文件或者文件夹的状态:
1、正常的:绿色的对号
2、被修改过的:红色感叹号
3、新添加的:蓝色的加号
4、未受控的(无版本控制的):蓝色的问号
5、忽略不受控的:灰色的减号
6、删除的:红色的x号
7、有冲突的:黄色的感叹号
-
如果在clone仓库时出现
No supported authentication methods available
错误,参考TortoiseGit提示No supported authentication methods available错误_tortoisegit no support auth_Xu_lib的博客-CSDN博客 -
TortoiseGit工具使用参考TortoiseGit-使用教程(图文详细版) - 吴川华仔博客 - 博客园 (cnblogs.com)