git基本用法
文档地址 https://git-scm.com/book/zh/v2
1.初次执行
git init #(会在当前文件夹下生成.git文件)
git remote add origin http://...................(远程仓库地址)
git pull origin develop #(把远程仓库的.gitignore文件拉取到本地目录下,如果远程目录为空,.gitignore在本地项目下创建的则不需要执行git pull ...)(没有设置用户名密码时,执行会弹出输入用户名和密码,要用有管理员权限的,否则push不上去)
2.提交代码
git status {*.j*,*er.xml} #查看本地变更的java,js,jsp,Mapper.xml等文件的变更状态
git add . #将变更文件添加到缓存区
git commit -m "初始化代码" #提交代码到本地分支
#git commit 时如果没有设置邮箱和用户名,会报错让你设置用户名和邮箱(
# git config --global user.name "名字"
# git config --global user.email "邮箱"
# (执行后会在C:\Users\Administrator生成.gitconfig文件,要改时可以手动改)
git commit --amend #修改最后一次提交的注释信息;
git push origin dev:dev #提交代码到远端分支;git push origin 本地分支:远端分支(":"左右没有空格,远端分支名不存在,则新建分支)
3.分支管理
3.1.git分支管理思路
- 在本地创建一个与远端develop分支相同的develop分支,用于每天同步远端develop代码。
- 本地开发有开发任务,就从本地develop分支上去创建新的任务分支。在同步远端代码后,需要本地merge本地的develop分支,如果有冲突本地解决冲突。这样在任务开发完成时提交代码就不会和远端分支产生冲突了。
- 本地正在开发任务,有新任务插入。则需要将正在开发的任务提交本地git仓库,然后切换到本地develop分支上为新任务创建新的分支进行开发。
3.2.常用语句
1. git checkout -b dev #创建分支并切换到分支
2. git branch -vv #显示每个(本地)分支当前指向的提交记录的哈希值,以及和其上游分支的相对位置(如果有的话)
3. git branch -av #显示所有本地及远端分支名
4. git branch --set-upstream-to dev remotes/origin/dev #Git在本地新建分支后,可做远程分支关联。关联目的是,如果在本地分支下进行pull 和push操作时 ,便不需要指定远程的分支。
5. git pull origin dev:dev #从远端拉取代码,替换本地文件。注意:dev可以是本地当前分支
6. git fetch origin develop : dev #从develop分支每天更新代码(拉取并合并,":"左右没有空格,本地分支名不存在,则新建分支。5同)。注意:dev“不能”是本地当前分支
7. git diff tmp #来比较本地代码与刚刚从远程下载下来的代码的区别
8. git merge tmp #合并temp分支到本地的master分支
9. git branch -d temp #如果不想保留temp分支 可以用这步删除
10. git remote prune origin #利用命令临时去除Git remotes/origin/* 分支本地信息(推荐)。
11. git branch --delete --remotes <remote>/<branch> #可以删除追踪分支,该操作并没有真正删除远程分支,而是删除的本地分支和远程分支的关联关系,即追踪分支。
12. git push origin --delete branch #如上,通过该命令行会删除远程分支和追踪分支,不需要单独删除追踪分支,但是如果通过网页对远程分支进行删除,追踪分支是不会被删除的.
13. git fetch origin --prune(或它的简写 git fetch origin -p ) #在git版本1.6.6之后,可以通过前面两条命令,来单独删除追踪分支。
3.3.只合并某个分支中的某个commit
3.3.1只合并一个commit
git cherry-pick 8ad7af6add8sd
#将commit 8ad7af6add8sd合并到当前分支
3.3.2.合并连续的多个commit到指定的分支上
#想要将dev分支中从 5adfad6dasd7d 到 6fad7dadsf8a 连续10个(多个)commit合并到当前分支(current_branch)。
git rebase --onto current_branch 5adfad6dasd7d^
4.版本修改
git rm --cached README #从本地Git仓库中删除readme文件,无论是已经commit的还是add的;
#如果一个文件已经add到暂存区,还没有 commit,此时如果不想要这个文件了,用版本库内容清空暂存区:
git reset HEAD #回退到当前版本(在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100);
git branch -d temp #删除temp分支
##查看最近提交的修改
git show
#知道commit_id的情况下:
#1. 获取commit_id
git log
#2. 查看commit内容
git show commit_id #[(如:git show 57f217c884a2e31a98a8f3fd2ce803b18bc479d4)查看最近n次提交的修改]
git log -p <file> #[查看,谁在什么时间修改了,指定文件的哪些内容]
#回退到指定版本(会更改本地代码)
git reset --hard commit_id #退到/进到 指定commit的码 commit_id:239afed0857cc2e77c17c01014077808619af64d
#回退指定文件
git checkout HEAD <file_path> #回退到本地仓库版本
git rm --cached <file_path> #删除暂存区或分支上的文件, 但工作区需要使用, 只是不希望被版本控制
git stash #能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录;
git stash save "注释" #作用同git stash,区别是可以加一些注释
git stash list #查看当前stash中的内容;
git stash pop #将当前stash中的内容弹出(堆栈中的内容会被删除),并应用到当前分支对应的工作目录上
git stash apply #作用同git stash pop,但堆栈中的内容不会被删除;
git stash drop + 名称 #从堆栈中移除某个指定的stash
git stash clear #清除堆栈中的所有内容
git stash show #查看堆栈中最新保存的stash和当前目录的差异;
查看当前用户名密码并修改
# 获取当前登陆用户:
git config user.name # 获取当前登录的用户
git config user.email # 获取当前登录用户的邮箱
# 修改登陆用户:
git config --global user.name 'userName' # 修改登陆账号,userName为你的git账号
git config --global user.email 'email' # 修改登陆邮箱,email为你的git邮箱
git config --global user.password 'password' # 修改登陆密码,password为你的git密码