您的位置:首页 > 其它

Git 学习笔记(1)

2017-08-24 15:32 302 查看

Git 学习笔记(1)

@([12] git)

原文链接:http://blog.csdn.net/TJUT_shadow/article/details/77530637

创建版本库

在当前目录新建一个Git代码库:
git init


新建一个目录,将其初始化为Git代码库:
git init [project-name]


下载一个项目和它的整个代码历史:
git clone 

提交缓存区指定文件到仓库区:
git commit <file> -m "message"


提交工作区自上次commit之后的变化,直接到仓库区:
git commit -a


分支管理

查看分支:
git branch


创建分支 :
git branch <name>


切换分支 :
git checkout <name>


创建+切换分支:
git checkout -b <name>


合并某分支到当前分支:
git merge <name>


删除分支:
git branch -d <name>


Bug分支

隐藏当前工作现场:
git stash


回到工作现场:
git stash pop
恢复时把stash内容也删除了

查看隐藏现场列表:
git stash list


回到指定工作现场:
git stash apply stash@{编号}
恢复后stash内容并不删除,需要git stash drop来删除除,需要git stash drop来删除

删除stash内容:
git stash drop


Feature 分支

新的开发功能最好新建一个分支,在开发完成后再合并到主分支上。

如果需要丢弃一个没有被合并过的分支,需要强行删除分支

强行删除分支:
git branch -D <name>


分支策略

master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

dev是干活的分支,大家从自己的分支时不时的向dev分支上合并

git merge --no-ff -m"merger with no-ff" dev
合并分支时加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能够看出来曾经做过合并。
fast forward
合并无法看出曾经做过合并。

本地新建的分支如果不推送到远程,对其他人就是不可见的。

哪些分支需要推送

master分支是主分支,因此需要时刻与远程同步

dev分支是开发分支,团队所有成员都需要在上面工作,所以需要与远程同步

bug分支用于在本地修复bug,没必要推送远

feature分支是否推到远程,取决于与你合作的是否在上面开发

多人协作的工作模式

首先,可以试图用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 add origin 仓库路径
eg. git remote add origin https://github.com/EricLee0107/learngit.git[/code] 
第一次推送master分支的所有内容:
git push -u origin master


之后每次修改推送:
git push origin master


取回远程仓库的变化,并与本地分支合并:
git pull [remote] [branch]


上传本地指定分支到远程仓库:
git push [remote] [branch]


-强行推送当前分支到远程仓库,即使有冲突:
git push [remote] --force


推送所有分支到远程仓库:
git push [remote] --all


查看信息

查看仓库当前的状态:
git status


查看文件修改:
git diff


查看提交历史:
git log


查看命令历史:
git reflog


查看分支合并图:
git log --graph


git在解决合并冲突时的做法是先将冲突合并起来,然后再手动修改冲突,重新提交,解决冲突。

显示所有远程仓库:
git remote -v


- 显示某个远程仓库的信息:
git remote show [remote]

撤销操作

回退到某个特定版本:
git reset --hard commit_id


撤销(丢弃)工作区修改 :
git checkout --file


撤销缓存区修改:
git reset HEAD file


如果修改已经提交到缓存区则需要先从缓存区撤销修改,再从工作区撤销修改.

git 版本

当前版本:
HEAD


上一个版本:
HEAD^


上上个版本:
HEAD^^


上N个版本:
HEAD~N


标签

新建标签:
git tag <name>
默认为HEAD,也可以指定一个commit id;

指定标签信息:
git tag -a <tagname> -m"blablabla..."


用PGP签名标签:
git tag -s <tagname> -m"blabla..."


查看所有标签:
git tag


推送一个本地标签:
git push origin <tagname>


推送全部未推送过的本地标签:
git push origin --tags


删除一个本地标签:
git tag -d <tagname>


删除一个远程标签:
git push origin :refs/tags/<tagname>


删除远程标签前需要先删除本地标签

其他

忽略某些文件时,需要编写.gitignore (工作区根目录下)

.gitignore 文件本身要放到版本库例,并且可以对其做版本管理

配置参考 [url=https://github.com/github/gitignore]https://github.com/github/gitignore" target=_blank>[/code]

git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快

增/删文件

添加指定文件到缓存区:
git add<file>


添加指定目录到缓存区:
git add [dir]


改名文件,并且将这个改名放入暂存区:
git mv [file-original] [file-renamed]


- 添加当前目录的所有文件到暂存区:
git add

代码提交

提交缓存区修改到仓库区:
git commit -m "message"


提交缓存区指定文件到仓库区:
git commit <file> -m "message"


提交工作区自上次commit之后的变化,直接到仓库区:
git commit -a


分支管理

查看分支:
git branch


创建分支 :
git branch <name>


切换分支 :
git checkout <name>


创建+切换分支:
git checkout -b <name>


合并某分支到当前分支:
git merge <name>


删除分支:
git branch -d <name>


Bug分支

隐藏当前工作现场:
git stash


回到工作现场:
git stash pop
恢复时把stash内容也删除了

查看隐藏现场列表:
git stash list


回到指定工作现场:
git stash apply stash@{编号}
恢复后stash内容并不删除,需要git stash drop来删除除,需要git stash drop来删除

删除stash内容:
git stash drop


Feature 分支

新的开发功能最好新建一个分支,在开发完成后再合并到主分支上。

如果需要丢弃一个没有被合并过的分支,需要强行删除分支

强行删除分支:
git branch -D <name>


分支策略

master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

dev是干活的分支,大家从自己的分支时不时的向dev分支上合并

git merge --no-ff -m"merger with no-ff" dev
合并分支时加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能够看出来曾经做过合并。
fast forward
合并无法看出曾经做过合并。

本地新建的分支如果不推送到远程,对其他人就是不可见的。

哪些分支需要推送

master分支是主分支,因此需要时刻与远程同步

dev分支是开发分支,团队所有成员都需要在上面工作,所以需要与远程同步

bug分支用于在本地修复bug,没必要推送远

feature分支是否推到远程,取决于与你合作的是否在上面开发

多人协作的工作模式

首先,可以试图用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 add origin 仓库路径
eg. git remote add origin https://github.com/EricLee0107/learngit.git[/code] 
第一次推送master分支的所有内容:
git push -u origin master


之后每次修改推送:
git push origin master


取回远程仓库的变化,并与本地分支合并:
git pull [remote] [branch]


上传本地指定分支到远程仓库:
git push [remote] [branch]


-强行推送当前分支到远程仓库,即使有冲突:
git push [remote] --force


推送所有分支到远程仓库:
git push [remote] --all


查看信息

查看仓库当前的状态:
git status


查看文件修改:
git diff


查看提交历史:
git log


查看命令历史:
git reflog


查看分支合并图:
git log --graph


git在解决合并冲突时的做法是先将冲突合并起来,然后再手动修改冲突,重新提交,解决冲突。

显示所有远程仓库:
git remote -v


- 显示某个远程仓库的信息:
git remote show [remote]

撤销操作

回退到某个特定版本:
git reset --hard commit_id


撤销(丢弃)工作区修改 :
git checkout --file


撤销缓存区修改:
git reset HEAD file


如果修改已经提交到缓存区则需要先从缓存区撤销修改,再从工作区撤销修改.

git 版本

当前版本:
HEAD


上一个版本:
HEAD^


上上个版本:
HEAD^^


上N个版本:
HEAD~N


标签

新建标签:
git tag <name>
默认为HEAD,也可以指定一个commit id;

指定标签信息:
git tag -a <tagname> -m"blablabla..."


用PGP签名标签:
git tag -s <tagname> -m"blabla..."


查看所有标签:
git tag


推送一个本地标签:
git push origin <tagname>


推送全部未推送过的本地标签:
git push origin --tags


删除一个本地标签:
git tag -d <tagname>


删除一个远程标签:
git push origin :refs/tags/<tagname>


删除远程标签前需要先删除本地标签

其他

忽略某些文件时,需要编写.gitignore (工作区根目录下)

.gitignore 文件本身要放到版本库例,并且可以对其做版本管理

配置参考 [url=https://github.com/github/gitignore]https://github.com/github/gitignore
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git