git学习笔记
初步配置
git config --global user.name "Your Name" git config --global user.email "email@example.com"
创建版本
mkdir git cd /e/program pwd git init
将文件添加到仓库
git add file1.txt git add file2.txt git commit -m "wrote two files"
-m
后面是本次提交的说明,commit
只会提交已经add的文件,所以add的文件又再次修改的时候,commit并不会提交最新修改的。
获取仓库最新状态
git status
当有文件被修改的时候,会有一个提示。
查看修改的具体情况
git diff test.txt
版本回退
查看已经提交过的commit版本
git log
如果信息太多,可以加上参数简化输出
git log --pretty=oneline
版本回退,其中HEAD^
表示上一个版本,HEAD^^
表示上上一个版本,HEAD~100
表示前100个版本
git reset --hard HEAD^
回退后又需要回到一开始的地方(回退前的时候),在未关闭的窗口找到前面的commit id
git reset --hard id
如果窗口关闭了,找不到id,执行下面的命令,会列出你的每一次命令,前面的数字就是Id
git reflog
暂存区的理解:
暂存区是.git版本库里面,会将git add添加的文件或者文件夹放在这里面,当commit的时候,会将里面的文件分别的更新到分支里面去。
撤销修改
修改了工作区的文件内容,想要丢弃修改的内容
git checkout -- file
修改了工作区的文件内容,并且添加到缓存区,想要丢弃
git reset HEAD file git checkout -- file
删除文件
本地操作的文件是工作区,git仓库里面的代码是版本库
删除文件
git del test.txt git commit -m "del test.txt"
当在工作区误删的时候,可以将版本库里面的文件恢复到工作区
git checkout -- test.txt
远程仓库
生成密钥和公钥
ssh-keygen -t rsa -C "iamstudy@126.com"
生成的时候那个密码可不用设置
然后进github的设置--ssh keys---add ssh key
标题任意,公钥在刚刚生成的文件id_rsa.pub里面,然后添加就ok
git remote add origin git@github.com:l3m0n/test.git
其中远程库是origin
第一次将本地库的所有内容推送到远程库:
git push -u origin master
以后的每次更新:
git push origin master
从远程库克隆到本地
git clone git@github.com:l3m0n/test.git
分支管理
创建属于自己的开发路线,直到最后全部提交
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到master:git merge name
删除分支:git branch -d name
解决冲突
分支和master都有修改且修改内容不一致,这时候合并起来就会产生冲突
可以看到合并情况,找到问题点
git log --graph --pretty=oneline --abbrev-commit
修复问题后再次提交,然后删除分支
git branch -d feature1
不使用Fast forward模式合并
git merge --no-ff -m "merge with no-ff" dev
这样的合并会有历史纪录,如果不佳--no-ff就没有记录
bug分支
dev目前工作分支,master主枝,issue-101修复bug分支
快照当前工作现场
git stash
切换到master
git checkout master
创建并切换分支
git checkout -b issue-101
修改提交
git add readme.txt
git commit -m "fix bug 101"
切换到master,合并分支
git checkout master
git merge --no-ff -m "test" name
删除分支
git branch -d issue-101
切换到工作分支
git checkout dev
查看快照
git stash list
恢复原来工作现场
git stash apply
但是stash不会删除,下面删除stash
git stash drop
git stash pop
恢复并删除
如果有多个stash,查看list后选择恢复
git stash apply stash@{0}
开发新功能
创建并切换
git checkout -b feature-vulcan
添加提交后
git add vulcan.py
git commit -m "add feature vulcan"
切换到dev分支
git checkout dev
丢失一个没有被合并过的分支
git branch -D feature-vulcan
多人协作
origin是远程库,dev是本地分支
查看远程库信息
git remote
更加详细的信息
git remote -v
推送分支
git push origin dev
小伙伴clone后想要在dev上工作
git checkout -b dev origin/dev
当你和小伙伴同时推送同一文件。内容却不相同
先获取最新origin/dev提交
git pull
如果git pull失败,可能是没dev和远程链接上
git branch --set-upstream dev origin/dev
然后就是本地合并,解决冲突,再push
大致流程:
- 首先,可以试图用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 tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id;
-a tagname -m "blablabla..."可以指定标签信息;
-s tagname -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签;
命令git push origin tagname可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d tagname可以删除一个本地标签;
命令git push origin :refs/tags/tagname可以删除一个远程标签。
配置别名
将status别名成st
git config --global alias.st status
搭建git服务器
sudo apt-get install git
sudo adduser git
sudo git init --bare sample.git
sudo chown -R git:git sample.git
编辑/etc/passwd文件 完成。找到类似下面的一行: git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
克隆远程仓库
git clone git@server:/srv/sample.git
参考:http://www.cnblogs.com/iamstudy/articles/git_notice.html