勤学如春起之苗,不见其增,日有所长。——陶潜
一、基本操作
1、 首次拉取远程仓库代码
git clone 远程仓库地址 [本地文件夹名称]
本地文件夹名称是可选的,如果不指定拉取到本地后,默认名称为远程仓库名字。
2、 更新代码
远程代码有变更,你想把本地代码更新时,可以通过 git pull 命令更新
git pull
3、git status:命令用于显示工作区和暂存区的状态。通常有下面几种状态:
- Untracked: 未跟踪,一般为新增文件,还没有加入到 git 库,不参与版本控制。通过 git add 状态变为 Staged.
- Changes to be committed:说明哪些文件已存添加到暂存区,在commit时,会将这些变更提交到本地仓库中。
- Changes not staged for commit::说明哪些文件未添加到暂存区,在使用commit命令进行提交操作时,若未使用-a参数,则这些文件不会提交到本地仓库中。
4、添加文件到暂存区
添加文件到暂存区可以指定添加文件或目录,或者一次性添加全部改动到暂存区。
添加指定文件到暂存区
git add fileName
添加目录到暂存区
git add dirName
一次性添加所有文件到暂存区
git add .
5、提交代码
通过commit命令可以将暂存区的所有代码都提交到本地仓库.
git commit -m "本次的提交信息"
commit命令还有一个-a参数,通过这个参数可以将所有已跟踪文件中的修改或删除都提交到本地仓库,即使这些文件被修改后没有经过git add添加到暂存区。需要注意有个前提,这些文件是被git所管理的文件,新加的文件(即没有被git管理的文件)是不能被提交到本地仓库的。
git commit -a -m "本次的提交信息"
6、将代码推送到远程
git push
将本地仓库当前分支的commit推送到远程服务器上对应的分支(远程已经存在和当前分支对应的分支)。
7、查看提交记录
git log
二、分支操作
1、查看分支
git branch
不带参数的情况下,查看的是本地分支列表。
git branch -a
加一个 -a 参数,可以理解为 all 的意思,查看本地和远程的所有分支。
2、新建分支
情况1:某个分支在远端存在,但是在本地不存在,需要把远程对应的分支在本地进行创建。
git checkout branchName
git checkout branchName 这个命令是用来切换分支的,但是当本地不存在该分支,会自动找到远程对应的分支然后在本地进行创建。如果远程存在该分支但是本地不存在,会在本地进行创建;如果本地已经存在了,就直接切换到该分支。
git branch branchName
git branch branchName会基于当前分支,创建一个新的本地分支,但不会切换到新分支上。
git checkout -b branchName
git checkout -b branchName 这个命令会基于当前分支,创建一个新的本地分支,并切换到该分支上去,创建的分支结构和内容与当前所在的分支一模一样。使用了这个命令后就成功创建并切换到新的分支了,但是该分支目前只在本地有,如果需要将其推送到远程需要借助另一个命令。
git push --set-upstream origin branchName
使用该命令可以指定远程的分支名,就可以将当前的本地分支推送到远程了。
3、删除分支
git branch -d branchName
-d 代表的是普通删除。通常情况使用普通删除即可,比较安全。如果遇到普通删除无法将分支删除,可以使用下面的命令: 强制删除
git branch -D branchName
4、合并分支
git merge branchName
在当前分支和branchName所代表的分支没有冲突,git会将branchName所代表的分支的代码和提交记录复制到当前分支中来,有冲突的话需要先解决冲突,再合并。
这篇博客只记录一些常用的命令,关于合并分支方式git merge以及git rebase后续有时间单独提出来写。
5、恢复已删除的分支
前提是被删除的分支的信息没有被 git gc 清除。
第一步使用git reflog
命令显示我们对所有分支的一些管理操作的记录(包括commit和reset的操作)。找到在需要恢复的分支上的最近一次commit的记录,复制commitid。接着使用 git checkout -b newBranchName commitId
就可以重新创建分支,并且切换到该分支(从最近一次commit 中检出分支)。
三、撤销操作
1、取消暂存区的暂存
git reset HEAD
git reset HEAD 会把暂存区恢复成和HEAD一样,工作区的内容不变。使用这个命令会让原来已经添加到暂区存但没有提交的文件重新变为未暂存的状态。
git reset HEAD命令是针对所有的文件,如果想要取消暂存区部分文件的修改,使部分文件的修改重新变为未暂存的状态,可以使用下面的命令:
git reset HEAD -- filename
取消多个文件的暂存命令如下:
git reset HEAD -- filename1 filename2
2、撤销工作区的修改
git checkout -- filename
git checkout – filename这个命令可以撤销工作区的修改,使用暂存区或版本库中的文件覆盖工作区的文件,让这个文件回到最近一次git add或git commit时的状态。
git checkout -- .
意义同git checkout – filename,只不过是针对工作区所有文件的。
2、将工作区和暂存区恢复到和某次commit一样(慎用)
git reset --hard HEAD
git reset --hard HEAD 命令 会将工作区和暂存区恢复成HEAD指针指向的commit一样,如果想要将工作区和暂存区恢复到和某次commit一样可以使用下面的命令:
git reset --hard commitId
该命令会将当前分支头指针指向该commitId,同时会将工作区和暂存区的内容都恢复到和该次commit一模一样的状态。
四、比较代码差异(diff)
1、暂存区和HEAD之间的差异比较
git diff --cached
通过这个命令就可以比较当前分支的最新提交和暂存区的差异了。
2、工作区和暂存区的差异比较
git diff
git diff 命令不加参数,默认比较的就是工作区和暂存区所有文件的区别,如果只想比较某个文件工作区和暂存区的差异,可以加上要比较的文件
git diff -- fileName
当然也可以同时指定多个文件
git diff -- fileName1 fileName2
3、不同commit之间差异比较
比较两个分支最新commit的差异
git diff branch1 branch2
分支其实就是指针,指向了该分支的最近一次的commit。本质上,上面这条命令就是比较两个分支最新的commit的差异。
如果想比较某个文件的差异在两个分支上的差异,可以加上要比较的文件作为参数:
git diff branch1 branch2 -- file1
上面的命令分支名都可以用具体的commitId来代替,如下
git diff commitId1 commitId2
这样就可以比较两次commit之间的差异,commitId1 commitId2可以是同一个分支的两次提交,也可以是不同分支上的。
五、忽略文件
在我们编写项目时,编译器通常会为我们生成一些配置文件,或者build相关目录等,每次我们使用git status总是会提醒我们这些文件 处于Untracked files状态,通常这些文件是和项目无关的,不需要被提交到git仓库,那么如何让git对忽略这些文件呢?
解决方法:在 Git 仓库的根目录下创建一个 .gitignore 文件,把想忽略的文件名或者目录添加进去,Git 就会自动忽略这些文件。eg:如下忽略指定的文件或目录
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties