1. 团队工作基本模型
建立初始远程仓库->各人拉取远程仓库到本地->建立自己的开发分支->开发完成后push新的分支到远程仓库,以保存且同步->review代码后无问题,合并到master分支
2. 创建并切换到自己分支工作
查看所有分支
git branch -a
说明:后面的参数-a表示查看所有的分支,主要应用于从远程pull下来的分支,因为远程拉过来的分支非自己创建的,所以直接git branch看不到
切换分支
git branch <分支名>
创建并切换到这条分支
git checkout -b <分支名>
把当前分支push到远程
git push origin <分支名>
说明:第一次创建远程没有的分支时,push需要带上分支名。后面git push不加参数时,就会默认推送到这个指定的分支了。
推送分支且和远程分支同步
git push origin <分支名> -u
说明:可以发现用上面的git push后,虽然把本地的分支推送上远程仓库了,但是此时想要git pull的话,会出现类似于这样一个提示
image.png
意思就是说当前这个分支还没有远程跟踪,所以没有办法拉取远程代码。而在git push后面加一个-u就是解决这个问题。当然了,也可以不加这个参数,然后在pull的时候按照这个命令提示,加上远程分支的跟踪。
3.拉取远程仓库
初始拉取远程仓库
git clone <git仓库链接>
说明:git clone操作会拉取远程仓库的所有分支,不过拉下来后默认是处于master分支,可以使用git branch -a来查看所有的分支。使用git checkout <分支名>来切换到指定分支。
同步远程代码到本地
git pull
说明:git pull不加分支名,表示拉取远程仓库所有默认同步的分支。这里默认同步的分支是初次git clone的时候远程仓库里包含的分支。git clone之后,远程仓库新添加的分支,则是拉不到的。如果要拉取新的分支,就需要指定分支名:git pull origin <分支名>。
3. 文件的三种状态以及各自的撤销方法:
- 未加入暂存区
git checkout <文件名>
- 已加入暂存区,未提交更改
git reset HEAD
- 已提交更改
git reset --hard HEAD^
4. 快捷提交(add+commit)
git commit -a
5. 合并分支
假设当前HEAD在master上,需要合并feature1的分支
git merge feature1
这里会有这几种情况:
-
master分支和feature1分支产生分叉,那么git会把feature1分支从分叉的地方开始的所有的更改内容合并到master上,并生成一个新的commit。但是master分支里不会有feature1分支的commit记录。 -
master分支和feature1分支没有分叉且feature1分支领先于master分支。换言之,从master拉出feature1分支后,master分支一直没有任何提交,只有feature1分支有提交内容。此时git会执行fast-forward操作,直接把master和HEAD移动到feature1的位置上。同时master也会包含feature1的所有commit历史。此时master和feature1处在同一commit的节点。 -
master分支和feature1分支没有分叉且master分支领先于feature1分支。换言之,从master拉出feature1分支后,feature1分支一直没有任何提交,只有master分支有提交内容。此时git不会执行任何操作,命令行会提示Already up to date。反过来,切换到feature1分支,然后执行git merge master,可以将HEAD和feature1移动到master的位置。与上面同理,feature1也会包含master的所有commit历史。此时master和feature1处在同一commit节点。(这也映证了分支并无主次之分,所有分支都是平等的,并不会因为有的分支叫master就会针对它会有一些特殊性。--这是git的特性,github还是有写区别的)
6.实用黑科技
stash:临时存放工作目录的改动。在 Git 中,stash指令可以帮你把工作目录的内容全部放在你本地的一个独立的地方,它不会被提交,也不会被删除,你把东西放起来之后就可以去做你的临时工作了,做完以后再来取走,就可以继续之前手头的事了。
具体说来,stash 的用法很简单。当你手头有一件临时工作要做,需要把工作目录暂时清理干净,那么你可以:
git stash
就这么简单,你的工作目录的改动就被清空了,所有改动都被存了起来。
重新取出这个缓存继续之前的代码编写:
git stash pop
说明:
没有被 track 的文件(即从来没有被 add 过的文件不会被stash 起来,因为 Git 会忽略它们。如果想把这些文件也一起stash,可以加上 -u 参数,它是 --include-untracked 的简写。就像这样:
git stash -u
参考链接:
git push与pull的默认行为 https://segmentfault.com/a/1190000002783245










网友评论