Git基础命令
git config
在安装完Git后,需要设置一下用户名称和地址
git config --global user.name "hhh" // 设置用户名称
git config --global user.email "hhh@126.com" // 设置邮件地址
通过git config --list
命令可查看全部配置信息
在Windows平台上可通过C:/Users/用户名
下.gitconfig
文件查看是否配置成功
可以为某一项目单独设置
git config --local user.name "hhh" // 设置用户名称
git config --local user.email "hhh@126.com" // 设置邮件地址
git init
获取Git仓库有两种方法:
- 在现有目录中初始化仓库
- 克隆现有仓库
对于第一种方式,通过git init
方式可初始化仓库,但请注意该命令只是新建一个.git
的子目录,对于项目里的文件还未被跟踪。
git clone
git clone git@github.com:hhh/leetcode.git // 通过ssh方式克隆
git clone https://github.com/hhh/leetcode.git // 通过https方式克隆
使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写
单独拉取远程指定分支
git clone -b 分支名 --single-branch <url>
git status
要查看哪些文件处于什么状态,可以用 git status
命令。
工作目录下的每一个文件只有两种状态:已跟踪或未跟踪。
已跟踪文件是指已经纳入版本控制中的文件,后续状态可能处于未修改、已修改、已暂存;未跟踪文件是指未纳入版本控制的文件。
当克隆完某个仓库时,工作目录中所有文件均处于已跟踪且未修改状态。
git add
当在项目中新增一个文件或者对已有的文件进行了修改,都需要将其添加到暂存区,然后提交到本地库。
git add test.txt //后面接文件名,表示将某个文件添加到暂存区
git add . //后面接一个点,表示将全部文件添加到暂存区
将新增/修改的文件添加到暂存区后,此时文件处于暂存区,并未提交到本地库,还需要通过git commit
命令提交到本地库。
git commit
每次准备提交前,先用 git status
看下,是不是都已暂存起来了,然后再运行提交命令 git commit
git commit -m "变更的说明信息" //标准用法,提交到版本库并填写相关说明信息
git commit -s //添加签名
执行完后,一次提交流程走完了,只剩push到远程仓库中了。
git log
查看历史提交
git log //查看历史版本
git log --graph //以图形的方式查看历史
git reflog
当使用git reset后想让HEAD回到原来提交上,使用git reflog查看历史提交。
git reset
git reset 有三种模式:
1、–soft:回到指定版本,已 add,但尚未 commit
git rest --soft HEAD^
2、–mixed:git reset 的默认设定,可以省略不写,文件会回退到未 add(未暂存)的状态
git rest --mixed HEAD^
3、 –hard:彻底回退,工作区和暂存区均无文件
git rest --hard HEAD^
git remote
git remote -v
该命令会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
git fetch
git fetch [remote-name]
将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中
git push
git push [remote-name] [branch-name]
在 push 之前一般需要 git pull 命令来拉取远程分支最新状态和本地分支进行合并,完成之后再 push 到远程。一般本地若是有修改,可以按照以下流程提交:
git stash
git pull
git stash apply 0
可能存在冲突,解冲突
git add <文件>
git commit -s
git push origin HEAD:refs/for/branch_name
git restore
当你想撤销已修改文件时,使用
git restore <file>
git pull
一般在本地分支的进度落后于远程分支时,需要使用该命令。
git pull [remote-name] [branch-name]
常用 git pull --rebase origin master
用 rebase 的方式进行,不会产生 merge 保持分支干净、整洁
git rm
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。
git rm 文件名
删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git clean
删除未追踪文件
git clean -fd
.gitignore文件
.gitignore 文件是用来告诉 Git 忽略哪些文件或目录的。通过编辑 .gitignore 文件,将想要忽略的文件或目录添加进去
请注意,.gitignore
文件对已经被 Git 跟踪的文件不起作用。如果之前已经提交过的文件需要被忽略,需要先将它们从版本控制中移除。
如果只想在本地库中忽略文件,而不将.gitignore 文件提交到远程仓库,可以按照以下步骤进行操作
- 新建.gitignore文件
- 编辑
.gitignore
*.pro.user
- 保存
Git分支
Git分支,本质上是指向提交对象的可变指针。那什么是提交对象呢?
在进行提交操作时,Git会保存一个提交对象。
git branch
1、创建分支
git branch test
创建test分支,本质上就是在当前提交对象上创建一个可移动的指针。
那当前提交对象在哪呢?其实就是HEAD指针,HEAD会指向当前所在的本地分支。
创建分支仅仅是创建出一个新的分支,但是Git并不会自动到新分支上去。
2、合并分支
git merge test
将test分支合并到当前分支上
实例:
- 第一种情况:简单前移合并。将hotfix分支合并到master分支
git checkout master
git merge hotfix
结果:master指针直接前移。
- 第二种情况:三方合并。将iss53分支合并到master分支
git checkout master
git merge iss53
结果:一次合并提交,提交对象为C6。
- 第三种情况:分支合并出现冲突。
解决办法:git status查看unmerged状态文件。打开冲突的文件手动解决冲突。在解决了所有文件里的冲突之后,对每个文件使用 git add 命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决。
3、删除分支
git branch -d test
一般在该分支上的开发工作完成,并且已经合入主线master分支后,即可删除该分支。
4、查看每个分支的最后一次提交
git branch -v
git checkout
git checkout test
分支切换操作,工作目录会恢复到指定分支最后一次提交的样子。
当想撤销在工作区中的已修改文件时,执行命令
git checkout -- main.cpp
git fetch
该命令会将远程分支拉取到本地。
举例:你基于本地master分支做了工作并提交,而其他人推送更新了服务器上的master分支,此时状态如下。
你此时要同步工作,需要运行命令
git fetch origin
它会从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针指向新的、更新后的位置。
注:当使用fetch拉取新的远程跟踪分支时,本地不会生成一个新分支。通过运行git merge origin/master将这些工作合并到当前本地分支上。
git rebase
整合来自不同分支的修改有两种方法:merge
和rebase
git checkout experiment
git rebase master
git checkout master
git merge experiment
目的是为了确保在向远程分支推送时能保持提交历史的整洁
git stash
git stash
git stash list
应用储藏
git stash apply --index
Github推送代码整体流程
创建GitHub远程库
本地库初始化
创建远程库地址别名
git remote add origin [SSH地址]
添加代码至暂存区
git add .
查看暂存区状态
git status
提交到本地库
git commit -m "commit whole project" .
推送一下
git push origin master