Github
创建目录:
mkdir learngit
把这个目录变成Git可以管理的仓库:
git init
把文件添加到仓库:
git add
把文件提交到仓库:
git commit
git commit -m "本次提交说明"
仓库当前的状态: (告诉我们哪些文件被修改了)
git status
查看修改内容:
git diff
查看历史记录:
git log
git log --pretty=oneline (每个记录在一行显示)
版本回退:
git reset --hard HEAD^
在Git中,用HEAD表示当前版本,也就是最新提交的commitid,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
版本回退,回退版本之前的版本都不见了
- 若命令行窗口还未关闭,则可以查看某个版本的commit id,用以下命令恢复:
git reset --hard
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
- 若已经关闭,以下命令记录每一次命令:
git reflog
丢弃工作区的修改:
git checkout -- filename
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
把暂存区的修改撤销掉:
git reset HEAD filename
工作区删除文件:
rm filename
从版本库中删除该文件:
git rm filename
git commit -m "......."
把误删的文件恢复到最新版本:
git checkout -- filename
本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
- 创建SSH Key:
ssh-keygen -t rsa -C "[email protected]"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
- 登陆GitHub,打开“Account settings”,“SSH Keys”页面。然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”。
在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得:
- 登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。目前在GitHub上的这个learngit仓库还是空的
- 把一个已有的本地仓库与GitHub上的learngit仓库关联:
git remote add origin [email protected]:chenhan2015/learngit.git
远程库的名字就是origin
- 把本地库的所有内容推送到远程库上:
git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:
此后,每次本地提交后,只要有必要,就可以使用命令推送最新修改
git push origin master
- 从远程库克隆一个仓库gitskills.git到本地:
git clone [email protected]:chenhan2015/gitskills.git
查看分支:
git branch
创建分支:
git branch
切换分支
:git checkout
创建+切换分支:
git checkout -b
合并某分支到当前分支:
git merge
git merge --no-ff -m "merge with no-ff"
删除分支:
git branch -d
如果要丢弃一个没有被合并过的分支,可以通过以下命令强行删除:
git branch -D
查看分支合并图:
git log --graph
git log --graph --pretty=oneline --abbrev-commit
把当前工作现场“储藏”起来:
git stash
查看工作现场:
git stash list
恢复工作现场:
git stash apply
删除工作现场:
git stash drop
恢复并删除工作现场:
git stash pop
可以多次stash,恢复的时候,先用
git stash list
查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
多人协作的工作模式通常是这样:
- 首先,可以试图推送自己的修改
git push origin branch-name
- 如果推送失败,则因为远程分支比你的本地更新,需要先试图合并
git pull
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再推送就能成功:
git push origin branch-name
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令
git branch --set-upstream branch-name origin/branch-name
- 查看远程库信息,使用
git remote -v
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用
git push origin branch-name
如果推送失败,先抓取远程的新提交
git pull
- 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
本地和远程分支的名称最好一致;
- 建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
- 从远程抓取分支,使用
git pull
如果有冲突,要先处理冲突。
- 新建一个标签:
git tag
默认为HEAD,也可以指定一个commit id;
- 指定标签信息:
git tag -a -m "blablabla..."
- 用PGP签名标签:
git tag -s -m "blablabla..."
- 查看所有标签:
git tag
- 看到说明文字:
git show
- 推送一个本地标签
git push origin
- 推送全部未推送过的本地标签
git push origin --tags
- 删除一个本地标签
git tag -d
- 删除一个远程标签
git push origin :refs/tags/
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
.gitignore文件无法添加,可以加-f强制添加到Git:
git add -f filename
检查.gitignore文件规则:
git check-ignore -v filename
配置别名:
git config --global alias.st status
--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用,Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中。
不加--global参数,那只针对当前的仓库起作用,每个仓库的Git配置文件都放在.git/config文件中。
别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。