git使用教程
配置 git config
$ git config --global user.name "charlie"
$ git config --global user.email "…@qq.com"
* 查看配置
$ git config --global --list
* 忽略文件权限引起的修改
$ git config --add core.filemode false
git查看
* 查看当前分支的历史纪录
$ gitk 或者 git log
* 查看上一次commit的详细修改
$ git log -p -1
* 暂存前查看文件的详细修改
$ git diff filename (统计信息在git diff后面添加--stat)
* 查看某个文件file最后的提交情况
$ git blame -L 1,10 file (-L 1,10 表示范围从1行到10行)
git获取github中的仓库
* 克隆仓库xxx并命名为master_clone
$ git clone xxx master_clone
* 获取项目xxx以及子项目
$ git clone --recursive xxx
git clone 若出现以下错误时,使用git替代https
远程仓库
* 显示远程仓库
$ git remote -v
git分支管理
* 创建分支
$ git branch 分支名
* 查看本地分支
$ git branch
* 查看所有(包括远程)分支
$ git branch -a
* 切换分支
$ git checkout 分支名
* 合并分支(将feature分支合并到master)
$ git checkout master
$ git merge feature
* 删除分支(删除本地分支)
$ git branch --delete 分支名
* 删除分支(删除远程分支)
$ git push origin --delete 分支名(remotes/origin/分支名)
本地新建分支提交到远程
git branch A // 创建本地分支
git checkout A // 切换到分支A
git push origin A:A // 推送到远程A
分支覆盖
git checkour A // 切换到分支A
git reset --hard B // 将分支A使用分支B覆盖
git提交
重新提交:git pull与git pull --rebase
* git pull = git fetch + git merge
* git pull --rebase = git fetch + git rebase
C:远程分支Origin
D:远程分支Origin上,别的同学做了修改并提交了
E:远程分支基础上创建的分支的提交点,已经commit;这个时候E不能提交,提交会导致冲突
M:git pull, 通过fetch origin分支,并与本地提交合并Merge成版本M
R:git pull --rebase, 创建一个新的提交,但是将E删除,便于提交的曲线为直线,便于理解
在rebase时可能出现冲突,需要解冲突,然后git add更新内容,不用执行git commit, 直接执行git rebase --continue,在任何时候都能使用git rebase --abort 参数来终止rebase的行为,使得mywork回到rebase之前的E状态
去除中间的提交
* commit id 1
* commit id 2
* commit id 3
// 去除第二次提交
1、git rebase -i commit_id_1
2、在弹窗中对于commit id 2的,将pick改为drop, 保存
3、重新提交
远程更新到本地(团队开发)
远程主分支 a - b(他人已提交)
本地主分支 a - c(本人的修改未提交)
最终远程主分支:a - b - c (本人修改提交后)
* 保存未提交的修改
$ git stash
* 更新本地主分支
$ git pull --rebase
* 恢复未提交的修改
$ git stash pop
* 后续提交: git add .; git commit -m "update readme.md"; git push origin master
cherry-pick & git reset
commit1
commit2
commit3
// git reset
git reset commit3 // 包括commit1, commit2, commit3的修改
git add/commit/push
// cherry-pick 代码被回退后,重新提交使用该方法
git cherry-pick commit3 // 只有commit3的修改
git push
冲突解决
A仓为自己开发,B仓为主线
git pull --rebase git@gitee.com:****.git master // 在自己开发的仓下,拉B仓(git@***.git)代码
git status
git add . // 解决完冲突后
git rebase --continue
:wq // 保存弹出的文件
git push -f origin master // 强推到A仓
撤销与回退
* 撤销工作区(git add之前)某个文件(file)的修改
$ git checkout -- file
* 撤销git add
$ git reset HEAD
* 撤销git commit, 不撤销git add;HEAD^:代表上一个版本
$ git reset --soft HEAD^
* 撤销git commit, 撤销git add
* $ git reset --mixed HEAD^
* 回退到历史commit处
1、查看提交的日志,找到需要回退的ID号
$ git log
2、本地回退
$ git reset --hard commit_id(commit字符)
3、远程同步
$ git push origin HEAD --force