git 常用指令
1、初始化仓库 及 全局设置
git init #本地目录直接创建
#Git 全局设置
git config --global user.name "myname"
git config --global user.email "myaccount@email.domain"
#或,从远程克隆创建
git clon git_url:account/project_name.git
例一:在本地已存在的文件夹版本库,关联远程 git 仓库,以阿里云为例
cd existing_folder
git init
git remote add origin git@code.aliyun.com:my_name/project_name.git
git add .
git commit -m "commit message"
git push -u origin master
例二:从已有远程 git 仓库克隆代码,创建本地库,以阿里云为例
git clone git@code.aliyun.com:my_name/project_name.git
cd project_name
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
2、查看、修改账号、密码、邮箱
git config user.name #查看账号
git config --global user.name "xxx(新用户名)" #修改账号
git config user.password #查看密码
git config --global user.password "xxx(新密码)" 修改密码
git config user.email #查看邮箱
git config --global user.email "xxx@xx.com(新邮箱)" 修改邮箱
3、增加文件、目录
git add #添加所有项目至缓存区
git add 目录名 #添加指定目录到缓存区
git add 文件名 #添加指定文件到缓存区
4、提交至本地仓库
git commit -m “注释信息”
5、推送至远程仓库,远程库的名字就是origin
git push -u origin master #第一次把本地库的master分支所有内容推送到远程库的master分支上
git push origin master #非第一次,将本地分支的更新内容,全部推送至远程仓库 master 分支
git push origin dev #非第一次,将本地 dev 分支推送到远程,再由一个人统一加到 master 分支上
6、拉取远程仓库最新文件
git clone git@github.com:git_account/project_name.git #第一次将远程库的所有内容拉取到本地
git pull #第二次及以上,拉取远程仓库所有分支合并到本地
git pull origin master #拉取远程master分支,合并到当前本地master分支
#拉指定分支如dev
git checkout -b dev
git clone -b dev git@github.com:git_account/project_name.git
git fetch #仅做拉取操作,不做合并,合并需要自己再找其他方法
7、checkout 与 分支
git checkout -b 分支名 #在本地当前分支的基础上,新建一个新分支
git checkout -b 本地分支名 origin/远程分支名 #拉取远程分支去创建本地分支
git checkout -b 分支名 某次commit_id #用某个commit新建分支
git branch #查看所有本地分支
git branch -r #查看所有远程分支
git branch -a #查看所有本地和远程分支
#用远程分支新建分支:
git fetch origin 远程分支名:本地分支名
git checkout 本地分支名
8、撤销修改
#尚未add,尚未commit
git checkout -- readme.txt
#已经add,尚未commit
git reset HEAD readme.txt
git checkout -- readme.txt
#已经commit,尚未推送到远程,版本回退
git reset —hard HEAD^
9、版本回退
git branch -D br #删除本地分支
git push origin :br #删除远程分支,origin 后面有空格
git reset --hard commit-id #回滚到commit-id,将commit-id之后提交的commit都去除
git reset --hard HEAD~3 #将最近3次的提交回滚,HEAD~3可以改写成HEAD^^^
#远程代码库回滚:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布。先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
git checkout the_branch
git pull
git branch the_branch_backup #备份一下这个分支当前的情况
git reset --hard the_commit_id #把the_branch本地回滚到the_commit_id
git push origin :the_branch #删除远程 the_branch
git push origin the_branch #用回滚后的本地分支重新建立远程分支
git push origin :the_branch_backup #如果前面都成功了,删除这个备份分支
10、删除文件
假如做了如下操作:git add test.txt
git commit -m "add test.txt"
然后发现加错了,现在删除:
rm test.txt #从工作区删除该文件
git rm test.txt,git commit -m "remove test.txt" #从版本库中删除该文件,并提交
假设工作区开始就删错了,可以用版本库的覆盖工作区的
git checkout -- test.txt
11、文件对比
git diff #查看尚未暂存的文件更新了哪些部分
git diff filename #查看尚未暂存的某个文件更新了哪些
git diff –cached #查看已经暂存起来的文件和上次提交的版本之间的差异
git diff –cached filename #查看已经暂存起来的某个文件和上次提交的版本之间的差异
git diff commit_id1 commit_id2 #查看某两个版本之间的差异
git diff commit_id1 commit_id2 具体文件路径 #查看某两个版本的某个文件之间
#git对比2个分支某个文件的差异
git diff branch1 branch2 --stat #显示出所有有差异的文件列表
git diff branch1 branch2 #显示出所有有差异的文件的详细差异
git diff branch1 branch2 具体文件路径 #显示指定文件的详细差异,红色部分是commit_id1,绿色部分是commit_id2
12、修改已提交的commit注释
#修改最后一次注释
git commit --amend #出现有注释的界面(你的注释应该显示在第一行), 输入i进入修改模式,修改好注释后,按Esc键 退出编辑模式,输入:wq保存并退出。ok,修改完成。
#修改之前的注释
git rebase -i HEAD~10
#想修改的那条注释前的 pick 换成 edit
git commit --amend
git rebase --continue
13、忽略上传
.gitignore 或者 excludes 只针对尚未提交到配置库的文件才起作用。而对于已经提交的文件是不起作用的。由此可见,这两个文件的初衷是用于排除不希望上传入库的文件。有个文件,我们必须入库,大家一起共享,但是每个人本地的配置又是因自己本地的环境而异。想后续不再更新给文件的修改,使用下面的命令:
git update-index --assume-unchanged FILENAME
这样,每个人,从库上取代码后,在自己本地都要执行一下上面的这个命令。这样,以后,你这个文件的修改,git 都会帮你忽略掉。
当然,哪一天,你希望你的修改要提交入库,那你也必须手动修改一下 这个文件的标志位:
git update-index --no-assume-unchanged FILENAME
14、BUG分支
在dev分支下开发,突然接到任务:去master下修复一个代号=102的bug,但此时dev上add了但未commit,咋办?1、用stash可以把当前工作现场“储藏”起来:
git stash
2、切到 master 分支,从 master 创建临时分支 issue-101,修复 bug:
git checkout master
git checkout -b issue-101
vim readme.txt
git add readme.txt
git commit -m "fix bug 101"
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
git branch -d issue-101
回到dev分支、恢复工作区,继续开发:
git checkout dev
git status 显示工作区是干净的,因为存在 stash 里面 git stash list 查看储藏列表。从储藏恢复到工作区,两种方式:
- 用 git stash apply 恢复工作区,再用 git stash drop 来删除 stash
- 用 git stash pop,恢复的同时把 stash 内容也删了
git stash list #再次查看,就看不到任何stash内容了
15、解决冲突
feature 分支和 master 分支各自修改 readme.txt,在 git merge feature 提示冲突了。git status 看到 2 个分支对 readme.txt 的提交冲突,或者 cat readme.txt 会看到 <<<,===,>>> 标记出不同分支的冲突内容。
修改冲突:将自己分支修改的代码提交到远程,并合并到master分支。
git checkout -b master
git pull
git checkout feature
git merge master
可手工编辑修改,或者 用 Git -> Resolve conflicts -> Merge -> Apply Changes and Mark Resolved,然后重新提交代码。查看分支合并情况:
git log --graph --pretty=oneline --abbrev-commit #