一、git中一些基本概念
1.工作区 当前直接操作的内容
2.暂存区 临时存放改变的内容
3.版本库 仓库中保存的内容
二、git存储变化
1.git add file
暂存区目录树更新
修改或者增加的文件内容会写到对象库中的对象中
2.git commit -m "这里可以填写提交的注释"
暂存区目录树写到版本库中
3.工作区和暂存区比较
git diff file
4.暂存区和HEAD比较
git diff --cached file
5.工作区和HEAD比较
git diff HEAD
三、文件提交到本地
1.git status
查看文件修改情况
2.git add [filename]
添加已修改的文件名
3.git commit -m "reason for commit"
将已加入的文件进行提交 并附上提交说明
四、文件push到远程仓库
1.git push origin master
把本地commit同步到远程仓库master分支,也可以提交到其他分支
五、git相关命令
1.git grep hello
在搜索所有工作区文件包含hello的内容
2.git clone url localName
克隆一份拷贝到本地
3.git log --stat
git log 能够查看所有提交的日志。 加上--stat表示显示每次提交文件变更统计
4.git diff filePath
对比修改的内容
5.git stash
将工作区和暂存区的改动全部封存起来
6.git branch
查看所有分支,带星号的是当前所在分支
7.git branch oneself
创建分支名为"oneself"的分支
8.git checkout oneself
切换到名为oneself的分支进行工作
git只有在根目录存在.git目录,这是工作区对应的版本库
9.git init test
初始化版本库test,一般不需要
10.git init demo --bare
创建一个裸仓库,裸仓库的意思就是仓库不保留工作区的内容。只有设置这个才能让别人push代码。为什么要裸仓库才能被push,
原意很简单,假设仓库有很多分支,每个分支的工作区可能不一样,这样以那个分支作为工作区呢?
工作区对于不是用来开发的共享仓库有什么意义呢?所以作为集中的共享仓库是没有工作区的
11.把当前分支中未提交的修改移动到其他分支
uatshiyj@APACICCC5084 $ git stash
uatshiyj@APACICCC5084 $ git checkout branch2
uatshiyj@APACICCC5084 $ git stash pop
12.git log
查看提交历史
13.git log --author="uatshiyj"
查看某个用户的提交历史
14.git log -p file
显示某个文件的所有修改
15.git branch -d <branch>
删除分支
六、更新与发布
1.git remote -v
查看当前配置的远程端
2.git remote show <remote>
显示远程端的信息
3.git remote add <remote> <url>
添加新的远程端
4.git push origin HEAD master
将本地版本推送到远程端版本
5.git push -u origin master
-u 在远程和本地分支间建立联系,第一次建立即可
七、撤销(慎用)
1.git reset --hard HEAD
放弃工作目录下的所有修改
2.git checkout HEAD <file>
放弃某个文件的所有本地修改
3.git revert <commit>
重置一个提交(通过创建一个截然不同的新提交)
4.git revert --hard <commit>
将HEAD重置到指定的版本,并抛弃该版本之后的所有修改
5.git reset --keep <commit>
将HEAD重置到上一次提交的版本,并保留未提交的本地修改
6.git checkout -- file
可以丢弃工作区的修改,恢复之前的操作
7.git rm file
删除文件
八、合并(慎用)
1.git merge <branch>
命令用于合并指定分支到当前分支
2.git log --graph
命令可以看到分支合并图
3.git log --graph --pretty=oneline --abbrev-commit
查看历史分支,带参数看分支合并情况.
4.git merge --no-ff -m "merge with no-ff" dev
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息.
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
而fast forward合并就看不出来曾经做过合并。
九、BUG分支
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作,请看下列命令(修复bug的方式不叙述了):
1.git stash
如果需要bug修复时可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
2.git stash list
查看之前“储藏”起来的工作现场
3.git stash pop
恢复工作现场,恢复的同时把stash内容也删了
十、Feature分支
软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个
新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
1.git checkout -b feature-oneself
创建一个feature分支并切换到该分支
2.git branch -D <name>
如果要丢弃一个没有被合并过的分支,可以通过此命令进行强行删除。
十一、这里讲一下多人协作模式:
1.首先,可以试图用git push origin branch-name推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。这就是多人协作的工作模式,一旦熟悉了,就非常简单。
1.工作区 当前直接操作的内容
2.暂存区 临时存放改变的内容
3.版本库 仓库中保存的内容
二、git存储变化
1.git add file
暂存区目录树更新
修改或者增加的文件内容会写到对象库中的对象中
2.git commit -m "这里可以填写提交的注释"
暂存区目录树写到版本库中
3.工作区和暂存区比较
git diff file
4.暂存区和HEAD比较
git diff --cached file
5.工作区和HEAD比较
git diff HEAD
三、文件提交到本地
1.git status
查看文件修改情况
2.git add [filename]
添加已修改的文件名
3.git commit -m "reason for commit"
将已加入的文件进行提交 并附上提交说明
四、文件push到远程仓库
1.git push origin master
把本地commit同步到远程仓库master分支,也可以提交到其他分支
五、git相关命令
1.git grep hello
在搜索所有工作区文件包含hello的内容
2.git clone url localName
克隆一份拷贝到本地
3.git log --stat
git log 能够查看所有提交的日志。 加上--stat表示显示每次提交文件变更统计
4.git diff filePath
对比修改的内容
5.git stash
将工作区和暂存区的改动全部封存起来
6.git branch
查看所有分支,带星号的是当前所在分支
7.git branch oneself
创建分支名为"oneself"的分支
8.git checkout oneself
切换到名为oneself的分支进行工作
git只有在根目录存在.git目录,这是工作区对应的版本库
9.git init test
初始化版本库test,一般不需要
10.git init demo --bare
创建一个裸仓库,裸仓库的意思就是仓库不保留工作区的内容。只有设置这个才能让别人push代码。为什么要裸仓库才能被push,
原意很简单,假设仓库有很多分支,每个分支的工作区可能不一样,这样以那个分支作为工作区呢?
工作区对于不是用来开发的共享仓库有什么意义呢?所以作为集中的共享仓库是没有工作区的
11.把当前分支中未提交的修改移动到其他分支
uatshiyj@APACICCC5084 $ git stash
uatshiyj@APACICCC5084 $ git checkout branch2
uatshiyj@APACICCC5084 $ git stash pop
12.git log
查看提交历史
13.git log --author="uatshiyj"
查看某个用户的提交历史
14.git log -p file
显示某个文件的所有修改
15.git branch -d <branch>
删除分支
六、更新与发布
1.git remote -v
查看当前配置的远程端
2.git remote show <remote>
显示远程端的信息
3.git remote add <remote> <url>
添加新的远程端
4.git push origin HEAD master
将本地版本推送到远程端版本
5.git push -u origin master
-u 在远程和本地分支间建立联系,第一次建立即可
七、撤销(慎用)
1.git reset --hard HEAD
放弃工作目录下的所有修改
2.git checkout HEAD <file>
放弃某个文件的所有本地修改
3.git revert <commit>
重置一个提交(通过创建一个截然不同的新提交)
4.git revert --hard <commit>
将HEAD重置到指定的版本,并抛弃该版本之后的所有修改
5.git reset --keep <commit>
将HEAD重置到上一次提交的版本,并保留未提交的本地修改
6.git checkout -- file
可以丢弃工作区的修改,恢复之前的操作
7.git rm file
删除文件
八、合并(慎用)
1.git merge <branch>
命令用于合并指定分支到当前分支
2.git log --graph
命令可以看到分支合并图
3.git log --graph --pretty=oneline --abbrev-commit
查看历史分支,带参数看分支合并情况.
4.git merge --no-ff -m "merge with no-ff" dev
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息.
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
而fast forward合并就看不出来曾经做过合并。
九、BUG分支
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作,请看下列命令(修复bug的方式不叙述了):
1.git stash
如果需要bug修复时可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
2.git stash list
查看之前“储藏”起来的工作现场
3.git stash pop
恢复工作现场,恢复的同时把stash内容也删了
十、Feature分支
软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个
新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
1.git checkout -b feature-oneself
创建一个feature分支并切换到该分支
2.git branch -D <name>
如果要丢弃一个没有被合并过的分支,可以通过此命令进行强行删除。
十一、这里讲一下多人协作模式:
1.首先,可以试图用git push origin branch-name推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。这就是多人协作的工作模式,一旦熟悉了,就非常简单。