文章作者:Tyan
博客:noahsnail.com | CSDN | 简书
1. Git仓库的创建
- 在当前目录新建一个Git仓库
1 | # 命令形式:git init |
- 在指定目录下新建一个Git仓库
1 | # 命令形式:git init [Directory Name] |
- 从Github等地方克隆一个仓库到当前目录(可能需要输入密码,以ssh方式克隆),如果不指定分支,则默认从Refactor仓库的Default branch(一般为master)克隆
1 | # 命令形式:git clone [url] -b [branch name] |
2. 关联远程仓库
- 将本地仓库与远程仓库关联,首先要初始化一个本地仓库,url可以在github的仓库获得,origin为远程仓库在本地的别名,即origin=git@github.com:*/Refacor.git
1 | # 命令形式:git remote add [remote repository aliase] [url] |
- 查看本地仓库关联的远程仓库
1 | # 命令形式:git remote [-v] |
- 删除本地仓库关联的远程仓库
1 | # 命令形式:git remote rm [remote repository aliase] |
- 关联远程仓库后,从远程仓库取内容,并根据远端仓库在本地创建了两个分支,master和develop
1 | # 命令形式:git fetch |
- 显示远程仓库的信息
1 | # 命令形式:git remote show [remote repository name] |
3. Git分支的创建、切换、删除、关联
- 创建本地分支并切换到新创建的分支,-b代表新创建一个分支,-B用在本地分支已经存在的情况下,强行创建一个新分支并将原来的分支覆盖,checkout主要是分支切换,创建分支使用branch命令
1 | # 命令形式:git checkout [-b or -B] [local branch name] |
- 切换本地分支
1 | # 命令形式:git checkout [local branch name] |
- 查看当前所在的本地分支,创建本地分支,local branch name不存在时是查看当前所在的本地分支,存在时是创建一个新的本地分支
1 | # 命令形式:git branch [local branch name] |
- 查看远程分支和所有分支,-r是查看远程分支,-a是查看所有分支
1 | # 命令形式:git branch [-r] [-a] |
- 删除本地分支
1 | # 命令形式:git branch -d [local branch name] |
- 创建本地分支并与远端分支关联
1 | # 命令形式:git checkout -b [local branch name] origin/[remote branch name] |
- 关联远程分支
1 | # 命令形式:git branch --set-upstream-to [remote repository name/remote branch] |
- 删除远程分支,git push origin –delete [remote branch name]是直接删除掉远程仓库的分支,git branch -dr [remote/branch]是删除本地分支与远程分支的关联关系。
1 | # 命令形式:git push origin --delete [remote branch name] or git branch -dr [remote/branch] |
注:本地可以有多个分支,远程也可以有多个分支,本地多个分支可以关联远程多个分支,但是,本地分支最好与远程分支同名,以免出现问题。
4.从远程仓库取内容,向远程仓库提交内容
向远程仓库提交内容之前,要理解三个概念:本地文件,缓冲区,本地仓库。平常修改的文件内容都是本地文件,在往远程仓库提交之前先要提交到缓冲区,再从缓冲区提交到本地仓库,然后本地仓库才能往远程仓库提交。本地的内容分为三大部分,它们是相互独立的,理解了这四个概念就明白为什么要执行git add,git commit,git push命令了。
- 从远程仓库取内容,git fetch默认情况下是当前的本地分支从其关联的远程分支上取内容,可以使用git branch先查看当前的本地分支,使用git status(包括本地分支和远程分支都能看到)查看其关联的远程分支。从下面的例子中可以看出本地分支为develop,远程分支也为develop
1 | # 命令形式:git fetch,git merge,git pull |
- 将从远程仓库取下的内容与本地仓库的内容进行合并,合并之前必须将本地的修改提交到本地仓库。
1 | # 命令形式:git merge |
- 解决冲突,冲突是使用git时常常会碰到的情况,冲突解决主要是在将本地仓库内容与远程仓库取下的内容merge后,进入merge后的文件进行修改,将冲突解决,然后重新add,commit,push即可。
冲突内容:
1 | # Refacor |
修改后的内容:
1 | # Refacor |
处理过程:
1 | $ vim README.md |
- 直接从远程仓库取内容并合并
1 | # 命令形式:git pull |
备注:git pull = git fetch + git merge,git pull功能很强大,能自动合并冲突,合并后需要手动解决冲突,最好不要直接使用git pull,因为许多细节都看不到。
- 将本地文件修改提交到缓冲区,git add filename是将单个文件提交到缓冲区,可以提交多个文件,中间用空格分开,也可提交目录,git add . 是将所有修改内容提交到缓冲区
1 | # 命令形式:git add [filename1] [filename2] or [directoryname] or [.] |
- 将缓冲区内容提交到本地仓库
1 | # 命令形式:git commit [file1] [file2] -m [comment] |
- 将本地仓库内容提交到远程仓库,默认情况下,如果你的本地分支与远程分支同名且关联,git push就可以,但如果不是你需要加上更多的东西。我本地仓库有master和develop分支,远程仓库有master和develop分支,我本地仓库的develop分支与远程仓库的master分支关联。所以直接git push是不可以的。最好不要这么干,我只是测试一下。下面的另一个例子是我将本地仓库的develop分支与远程仓库的develop分支关联并提交修改到远程仓库。
1 | # 命令形式:git push [remote repository name] [remote branch] |
1 | $ git branch --set-upstream-to origin/develop |
5. Git配置
- 查看Git的所有配置信息
1 | # 命令形式:git config --list |
- 查看特定的配置信息
1 | # 命令形式:git config --get [variable] |
- 配置用户名和邮件,加上–global是配置全局的,否则是配置当前仓库的,当前仓库的配置会覆盖全局配置
1 | # 命令形式:git config [--global] [user.name or user.email] |
6. 查看提交记录
- 查看提交记录,当前分支的版本历史
1 | #命令形式:git log |
- 显示commit历史,以及每次commit发生变更的文件
1 | # 命令形式:git log --stat |
- 查看最近的操作信息
1 | # 命令形式:git reflog |
- 显示缓存区和工作区的差异
1 | # 命令形式:git diff |
7. 切换分支修改内容
有时候你正在某个分支上进行开发,突然来了一个任务要修改另一个分支上的内容,而此时你还不想将当前分支的内容提交,git stash(保存当前的工作状态)命令就有了用处。
1 | # 查看当前工作状态 |
8. 查看本地代码与远程仓库代码之间的差异
1 | * git diff 查看尚未加入缓冲区的文件与远程仓库代码的差异 |
9. 代码回滚
- 缓冲区的代码回滚
所谓缓冲区代码回滚就是将已经add的代码,即缓冲区代码重新移到工作空间中,主要用来有的代码不想提交的情况下。
1 | # 命令形式:git reset HEAD filename |
- commit代码回滚
1 | # 命令形式:git reset --head commit_id |
10. 放弃修改
下面的修改都是未提交到缓冲区的修改
- 放弃修改与远程仓库一致
1 | # 命令形式:git reset --hard origin/branch_name |
- 放弃修改与本地仓库一致
1 | # 命令形式:git reset --hard HEAD |
- 放弃某个文件的修改
1 | # 命令形式:git checkout -- filename |
备注:还有很多没讲到,例如tag,但我感觉现有的东西已经足够用了,以后需要再去查资料吧。
11. 添加多个远程仓库,并解决merge的冲突
1 | $ git remote add origin git@github.com:***/A.git |