Git学习笔记

git流程图

本地操作

初始化一个git仓库

git init

将文件加入/撤出暂存区

git add .

这个命令会将目录下所有文件加入git仓库,如果使用git add *,则只会加入当前目录下的文件。

git reset HEAD <文件>

将暂存区中的更改撤回至工作区,用于回滚add操作。

提交至本地仓库(HEAD)

git commit -m"commit message"

如果出现changes not staged for commit之类的错误,重新执行git add .

回滚本地更改

将工作区中的更改回滚至HEAD

git checkout -- <文件>

忽略文件

有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件,或是编译生成的一些文件。对于这类文件,我们可以在.gitignore中将他们排除。

对于要排除的文件,只需要将文件名写入.gitignore即可。除此之外,GitHub还提供了每一种语言的.gitignore模板:

之后在执行git add时,git会提示有哪些文件根据.gitignore文件的规则被排除了。

查看差异

比对暂存区与工作区。

git diff

比对工作区与当前分支最新commit(HEAD)

git diff HEAD

比对两次提交

git diff bfe12d0d31a8f41376e5cfa04f6eb80ade7dcc6d 9b3708ff25b81050e941058a447e1cb19f67531e

基本命令

git log
git status

远程操作

使用GitHub

首先需要把电脑的ssh key添加到GitHub

ssh-keygen -t rsa -C "你的邮箱"

如果一切都保持默认的话,在~/.ssh目录中会有id_rsaid_rsa.pub,前者是私钥,后者是公钥。

打开GitHub→Settings→SSH Keys,点击New SSH Key,将id_rsa.pub中的内容粘贴进去。

然后在GitHub新建一个repo。

将本地仓库关联到远程仓库(GitHub仓库)

git remote add origin git@github.com:yourname/xxx.git

其中origin代表远程仓库的名字,可以自己起。

推送到远程仓库

git push -u origin master

第一次推送master分支时,加上-u参数,Git会把本地的master分支内容推送到远程新的master分支,同时把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令,使用:

git push origin master
git pull

你可以把 master 换成你想要推送的任何分支
关于-u参数的解释详见http://stackoverflow.com/questions/5697750/what-exactly-does-the-u-do-git-push-u-origin-master-vs-git-push-origin-ma
在推送的时候,可能会出现类似这样的错误。

提示:更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外
提示:一个版本库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 ‘git pull …’)。

如字面意思,需要先使用git pull整合远程仓库的变更。具体做法请查看 从远程仓库拉取代码至工作区
也可以使用+master强制推送

git push -u origin +master

当使用http方式关联远程仓库时,每次pushpull操作都需要输入密码,使用

git config --global credential.helper store

保存输入过的密码。

从远程仓库克隆代码至本地仓库

git clone git@github.com:yourname/xxx.git

从远程仓库拉取代码至工作区

git pull origin master

pull等价于先fetchmerge
在合并时git会尝试自动合并,如果合并不成功则出现冲突
举个栗子,假如本地仓库有1,2两个文件,远程仓库有1,2,3三个文件,拉取时git将自动把3合并至本地仓库。
如果远程仓库和本地同时修改了文件1的同一处,则会产生冲突,需要手动处理。

处理冲突

自动合并 1.txt
冲突(内容):合并冲突于 1.txt
自动合并失败,修正冲突然后提交修正的结果。

发生冲突的文件形如:

<<<<<<< HEAD
3hahahaha
=======
3333333
>>>>>>> 45b944792e75cffb62d5b9c53eac3bb363ce2448

分割线上方为当前HEAD的更改,下方为远程仓库commit id 的更改。编辑发生冲突的文件,消除冲突。

您的分支和 ‘origin/master’ 出现了偏离,
并且分别有 1 和 1 处不同的提交。
(使用 “git pull” 来合并远程分支)
所有冲突已解决但您仍处于合并中。
(使用 “git commit” 结束合并)

执行git commit结束合并。

您的分支领先 ‘origin/master’ 共 2 个提交。
(使用 “git push” 来发布您的本地提交)

执行git push将更改推送至远程仓库。

分支

创建/删除/切换分支

创建一个dev分支,并切换至它。

git checkout -b dev

该命令等价于

git branch dev
git checkout dev

删除dev分支

git branch -d dev

合并某分支至当前分支

git merge <分支>

有合并就会有冲突,解决分支合并冲突的方法同上节。

…待续…

Show CommentsClose Comments

Leave a comment