新手git操作指南
前言:之前对git的操作只是停留在一个人的开发练习操作中,而git除了在版本管理方面有起到作用,对于多人协作也起了不少作用,导师也提了一个code review的想法,所以我也去多查看了一些常见的git操作,再此做一个记录,也给之后一些实习小白一点点帮助吧。
1 git项目提交
- 全局配置:
git config --global user.name "joanaxu"
git config --global user.email "joanaxu@tencent.com"
- 从0开始从远程仓库拉取新项目
git clone http://git.code.oa.com/joanaxu/test.git
cd test
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
说明: 第一次关联使用git push -u origin master命令,加上-u参数,
git会把本地仓库master分支内容推送到远程仓库的master分支,并且会将本地的master分支和远程的master分支关联起来,
以后本地提交时只需要使用git push origin master命令即可。当远程仓库为空时可以关联成功。
- 将本地现有项目推到远程master上
cd existing_folder
git init
git remote add origin http://git.code.oa.com/joanaxu/test.git
git add .
git commit
git push -u origin master
2 git常见操作命令
-
分支相关
git branch // 查看本地分支
git branch -a // 查看所有分支
git checkkout -b test // 创建test分支并切换到test分支
git checkout test // 切换到test分支
git branch test // 创建一个test的本地分支
git merge feature1 // 将feature1分支合并到当前分支
git branch -d feature1 // 将feature1分支删除
- 忽略一些提交的文件
忽略一些文件、文件夹不提交
在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如
target
bin
*.db
- 推送改动
git push origin 分支名 // 将本地修改推送到远程服务分支上
git remote add origin <server> // 以后可以直接用origin来表示远程
- 更新本地分支
git pull // 从远程拉取分支
- Bug 分支
场景:当我们在一个开放分支上开放一段时间之后,测试那边有一个bug急需修改,因为我们当前的工作还没有完成,不能直接把当前的修改提交上去。其次,我们也不会直接不提交直接切换分支,这时候可以使用git stash
。git stash
可以对当前的工作修改内容进行隐藏存进暂存区,等到bug修改完成后再回过来将暂存区内的修改拿出来继续开心地码代码。
git stash //将修改存储到暂存区,工作区会删除这些修改
git checkout <bug_branch>
git stash show //查看刚才暂存的修改
git checkout <feture_branch> //切换刚才功能开发的分支
git stash pop //取出修改
git stash list //查看暂存区的所有暂存修改记录
git stash list //查看暂存区的所有暂存修改
git stash apply stash@{X} //取出相应的暂存
git stash drop stash@{X} //将记录列表中取出的对应暂存记录删除
- 建议使用git rebase,这是为了使提交线上的逻辑不会那么复杂
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
git merge 和 git rebase 都是合并当前分支到另外一支分支上。
1、git merge
用git pull命令把"origin"分支上的修改pull下来与本地提交合并(merge)成版本M,但这样会形成图中的菱形,让人很困惑。
2、git rebase
创建一个新的提交R,R的文件内容和上面M的一样,但我们将E提交废除,当它不存在(图中用虚线表示)。由于这种删除,小李不应该push其他的repository.rebase的好处是避免了菱形的产生,保持提交曲线为直线,让大家易于理解。