拉取代码
- 拉取远程代码 git clone <git代码地址 github.com/…/AAA.git>
- 查看本地分支和远程分支
- cd AA 到工程目录下
- git branch -al 查看本地和远程的所有分支
- 将远程分支和本地分支进行关联 git pull origin master
增
- 创建分支 git branch <branch-name>
- 新建并切换到新建分支上 git checkout -b <branch-name>
- 提交三部曲
- git add . (git add <file>) 添加工作区改动到暂存区
- git commit -m <info> 提交暂存区内容到本地分支
- git push 提交本地分支日志到远程分支
- 拉取历史版本
- git log 查看需要拉取的历史版本,复制对应的SHA
- git branch <new branch-name> <SHA值> 新建分支
- git checkout <new branch-name> 切换到新分支
- git push origin <new branch-name> 上传新命名的本地分支
- git branch --set-upstream-to origin/<new branch-name> 把修改后的本地分支与远程分支关联
删
- 删除本地分支
git branch -d \<branch-name\>(当前分支不能是要删除的分支名)
- 删除远程分支
git push origin --delete \<branch-name\>
改
修改当前账户用户名
1、查询用户名
git config user.name
2、修改用户名
git config --global user.name ****
3、如果在修改之前已经 push 到了远端,修改后再次 push 会出现冲突
git commit --amend --reset-author --no-edit
撤销/版本回退
1. 未执行git add . 缓存代码时: a、指定放弃某一文件修改内容:
git checkout -- [文件路径]
b、全部放弃修改文件:
git checkout .
【注意】但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。
2. 已执行了git add .的暂存区文件的修改(用本地分支中上一次提交的文件代替暂存区里的文件,不会影响工作区文件)
git reset HEAD -- <filename> (HEAD表示最近一次提交)
git reset <commit id> -- <filename> (回退到commit_id中的filename版本)
git reset <commit id> (版本回退)
3. 已经用git commit 提交了代码的工作区文件的修改(用暂存区里的文件代替工作区文件)
git checkout -- <filename> git checkout -- . 将当前工作区内容用暂存区内容替代
a. 回退到上一次commit的状态
git reset --hard HEAD^
b. 回退到任意版本
git reset --hard <commit id> --hard参数会使工作区和暂存区都被恢复到上一次提交时的样子
- 撤销上一次提交,并将暂存区文件重新提交 git commit --amend
重命名
- 本地分支(local branch)
git branch -m <old branch-name> <new branch-name>
- 远程分支(remote branch)
1. 重命名远程分支对应的本地分支 git branch -m \<old branch-name\> \<new branch-name\>
2. 删除远程分支 git push --delete origin \<old branch-name\>
3. 上传新命名的本地分支 git push origin \<new branch-name\>
4. 把修改后的本地分支与远程分支关联 git branch --set-upstream-to origin/\<new branch-name\>
查
- 查看本地仓库所有分支 当前分支带*号
git branch
- 查看本地及远程仓库所有分支
git branch -a
- gitk 通过图形界面工具查看版本历史
gitk --all
- 查看当前分支所有提交历史
git log git log --pretty=oneline 查看历史更直观
- 查看命令历史,记录了所有分支的所有操作(包括已经被删除的 commit 记录和 reset 的操作)。
git reflog
- 查看各个分支最后一个提交对象的信息
git branch -v
- 切换到某个分支
git checkout <branch-name>
-
查看仓库状态 git status
- Untracked files 显示工作区中存在而暂存区中没有的文件,通常为新建的文件
- Changes not staged for commit 工作区和暂存区中内容不同的文件。通常是因为修改了文件,显示为modified;以及暂存区中存在但工作区里没有的文件,通常是因为删除了文件,显示为deleted
- Changes to be committed 显示的是暂存区里有,但是上一次提交中没有的
-
本地同步更新远程分支 git pull
隐藏
-
git stash 暂存分支工作状态,隐藏当前分支未提交的变更,已方便切换分支
-
git stash save <save message> 暂存分支工作状态,添加备注,方便查找
-
git stash list 查看分支存储的工作状态
-
git stash apply 恢复分支工作状态,默认恢复第一个存储,即stash@{0}
-
git stash apply stash@{num} 恢复某一个分支工作状态
-
git stash drop 删除分支存储的分支状态
-
git stash pop 恢复并删除分支存储工作状态
合并
- 开发分支(dev)上的代码达到上线标准后,要合并到master分支
1. git checkout dev
2. git pull
3. git checkout master
4. git merge dev
中间如果出现冲突(conflicts)
1、先解决冲突(resolve)
2、git add <filePath>
3、重复步骤12,直到所有冲突都解决了
4、git commit
5. git push -u origin master
- 当master代码改动了,需要更新dev上的代码
1. git checkout master
2. git pull
3. git checkout dev
4. git merge master
5. git push -u origin dev
- 使用rebase进行代码合并
dev合并到master
1. git checkout dev
2. git rebase master
3. git add .
4. git rebase --continue
5. git checkout master
6. git merge master
git merge 比较粗暴,也是大多数会选择的方式,这种方式可以保证每个 commit 都按照时间顺序排列,但是分支图会非常凌乱,而会引入一次没有意义的 commit。
git rebase 在历史提交记录就是一条线,非常优雅,但存在修改历史commit的风险,并且git log查看日志时commit时间线错乱。
个人倾向于使用 rebase 方法,毕竟 commit 的认知成本摆在那里,而且看着也舒服。不过如果开发人员很多,还是merge吧,毕竟一个个解决冲突会烦死个人
回滚
reset current branch to here => Hard => reset => OK