Git
Git
分布式版本管理工具。
分布式版本控制系统没有“中央服务器”,每个人电脑都是一个完整的版本库,这样在工作的时候就不需要联网了,多人协作只需要各自的修改推广给对方,就可以看到对方的修改了。
安装
Git - Downloads (git-scm.com),在官网下载,然后安装就可以了。
如果选择自解压,需要配置环境变量。
打开控制台窗口,输入git --version,成功输出版本号就意味着成功安装。
安装完成后,首先要做的事情是设置用户名和邮箱,每次Git提交都会使用该用户信息。
git config --global user.name "username"
git config --global user.email "example@example.com"
如果已经设置过,再次输入就可以覆盖之前设置的。
查看配置信息:
git config --global user.name
git config --global user.email
使用
获取本地仓库
要使用Git对代码进行版本控制,首先需要获得本地仓库。在需要管理的目录下,输入git init,完成后会在当前目录下生成一个.git隐藏目录。
基础操作指令
Git工作目录下对文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着指向Git的指令而变化。

git status
查看文件状态
git add
将工作区未暂存或未跟踪的文件添加到暂存区。
可以在后面加文件名:git add filename.text
也可以使用通配符的方式:git add .。这个.就是通配符的意思,表示将目录下所有文件都添加到暂存区中。
git commit
将暂存区提交到仓库里。
使用方式:git commit -m "remark"。双引号里的内容修改。
git log
查看提交(commit)记录。
git long [option]
options:
- -all 显示所有分支。
- –pretty=oneline 将提交信息显示为一行。
- –abbrev-commit 使得输出的commit更简短。
- –graph 以图的形式显示。
git reset
版本回退
使用方式:git reset --hard commitID。
这个commitID可以使用git log查看。那一串较长的十六进制就是commitID了。
commit ab8db8fb4fa5753e5c22a4d07ddde18f7b24753e (HEAD -> master, origin/master, origin/HEAD)
其中ab8db8fb4fa5753e5c22a4d07ddde18f7b24753e就是commitID,如果使用--abbrev-commit,只会显示前面几位,短的和长的效果一样。
git reflog
查看已输出的记录。
通常是使用了git reset回退了,又想再找回来,不过使用git log已经看不到被删除提交记录了,这时候就可以使用这个命令查看已经删除的提交记录。
.gitignore文件
这个文件可以告诉git那些文件不被管理。就是排除的意思。
分支
HEAD指向当前的分支。
git branch
查看分支
git branch 分支名
创建一个分支。
git checkout 分支名
切换分支
还可以直接切换到一个不存的的分支(创建并切换):git checkout -b 分支名。
git merge 分支名
将指定的分支合并到当前分支。
git branch -d 分支名
删除分支,需要做各种检查。
git branch -D 分支名
强制删除分支。
git branch -vv
查看当前分支版本。如果关联了远端分支,也会显示远程分支版本。
解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时候就需要手动解决冲突。
- 处理文件冲突的地方。(会生成
<<< HEAD)这种的字符,给这些生成的删除了,保留自己想要的。 - 将解决完冲突的文件加入暂存区(add)。
- 提交到仓库。
远程协作
为本地仓库添加一个远程参考
git remote add origin 远程仓库地址
其中origin是名称,不推荐修改。
输入git remote查看远程仓库。
推送到远程仓库
git push origin master。第一次会创建一个master的分支。
完整的命令:git push [-f] [--set-upstream] [远端名称] [本地分支名称]:[远端分支名]。
- 如果远端分支名和本地分支名相同,则可以只写本地分支名。
--set-upstream:推送到远端的同时并且建立起远端分支的关联关系。-f:强制覆盖。- 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
获取远程仓库
git clone <仓库路径> [本地目录]。
从远程仓库抓取和拉取
远程分支和本地分支一样,我们可以进行merge操作,只是需要先从远程仓库将更新都下载到本地,再进行merge操作。
- 抓取命令:
git fetch [remote name] [branch name]- 抓取指令就是将仓库里的更新都抓取到本地,不会进行merge。
- 如果不指定远端名称和分支名,则抓取所有分支。
- 拉取命令:
git pull [remote name] [branch name]- 拉取指令就是将仓库里的更新都抓取到本地,且自动合并。等同于
fetch + merge。 - 如果不指定远端名称和分支名,则抓取所有分支,并更新当前分支。
- 拉取指令就是将仓库里的更新都抓取到本地,且自动合并。等同于
解决冲突
远程分支也是分支,方法与上文方法一样。
注:在push之前,先来一个pull。
其它
撤销commit
–mixed
git reset --mixed HEAD^
不删除工作空间提交的代码,撤销 commit,并且撤销 git add . 操作。
注意:-mixed 为默认参数。git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
–soft
git reset --soft HEAD^
不删除工作空间提交的代码,撤销 commit,但不撤销 git add . 操作。
注意:仅仅是撤回提交,修改的代码仍然保留在本地仓库。
–hard
git reset --hard HEAD^
删除工作空间提交的代码,撤销 commit,并且撤销 git add . 操作。
注意:撤回后,本地提交的代码也不保留。就等于恢复到了上一次的 commit 状态。
注
HEAD^的意思是上一个版本,也可以写成HEAD~1。如果你进行了 次commit,想都撤回,可以使用HEAD~2。- 如果只是
commit注释写错了,只是想改一下注释,只需要执行git commit --amend。此时会进入默认vim编辑器,修改注释完后保存即可。