Git学习攻略
Linux 常用命令:
1.cd pwd su 2.ls; ls-l; ll 3.mkdir 4.touch
5.cat 6.grep 7.history 8.clear
9. 文件写入 > 10.rm 11.cp mv 12.alias
Git安装配置:
git config --global user.name "..."
git config --global user.email "..."
TortoiseGit 图形化Git管理工具
Git常用命令:
HEAD 当前版本库的头指针
HEAD^ 版本库的上一次提交
~n 前n次提交
暂存区stage
工作区
1.git init 初始化仓库
2.git clone 克隆仓库代码
git pull 更新代码
git fetch; git merge
3.git branch
1)git branch name 创建分支
2) git branch -m oldName newName 本地分支重命名(未推送至远程)
3) git branch -v 查看当前分支
4) git branch 查看所有分支
5) git branch -d 删除本地分支 -D 强制删除
6)git branch -f 强制修改分支位置,让分支指向另一个提交
7) git push origin --delete newName 删除远程分支
4.git checkout 检出分支 默认是暂存区
1)git checkout -b 创建并切换分支
2)git checkout branch 切换分支,更新HEAD指向branch,并用branch指向的树更新暂存区和工作区
3)git checkout 汇总显示工作区、暂存区和HEAD的区别
4)git checkout -- filename 用暂存区的filename文件覆盖工作区的文件。(相当于重置)
5)git checkout branch -- filename 用branch所指向的提交中的filename 替换工作区和缓存区的相应文件。
origin/develop 服务器develop分支
6)git checkout . 暂存区文件覆盖本地所有文件
7)git checkout HEAD . 或git checkout HEAD <file> 用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区中的文件
5.git add
1) git add -u 将本地文件的变更(修改、删除)全部记录到暂存区
2)git add -a 将工作区中所有改动和新增文件添加至暂存区
3) git add -i 选择性的添加文件
4) git add . 添加所有变更的文件至暂存区
6.git commit
1) git commit -m "..." 提交代码并注释
2)git commit --amend 撤销最近提交
7.git status 暂存区和工作区改变
1)git status -s 精简输出
8.git diff 代码比对
1).git diff 工作区和暂存区比较
2).git diff HEAD 工作区和HEAD比较 HEAD是远程分支
3).git diff --cached 暂存区和HEAD比较
4).git diff B A
9.git log 代码提交历史
1)git log --online
2)git log -n(数字) --pretty=oneline 最近提交的几条记录
3)git log --graph 查看分支合并图
4) git log --stat 查看每次提交的文件变更统计
git reflog
1) git reflog show branch1 查看branch1提交记录
10.git reset 重置命令
1). git reset --hard HEAD^ 彻底撤销最近的提交。引用,工作区,暂存区都回退。自己当前版本写的代码丢失。
git reset --hard 版本号 回退值某个版本
2). git reset 和 git reset HEAD
重置暂存区,将git add命令撤销
3). git reset --filname 和 git reset HEAD filename 将文件filename改动撤出暂存区,撤销git add
4). git reset HEAD^ 和 git reset --mixed HEAD^ 工作区不改变,暂存区和引用回退。(未提交的代码不受影响)
5).git reset --soft HEAD^ 工作区和暂存区不改变,引用回退。相当于撤销git commit
11.git mv oldFileName newFileName 文件改名
12.git stash 保存和恢复工作进度
1)git stash 保存当前工作进度。分别对暂存区和工作区的状态进行保存
save "message...." 保存进度并进行说明
2)git stash list 显示进度列表。
3)git stash pop 恢复最新保存的工作进度,并将恢复的工作进度从储存的工作进度列表中清除
4)git stash [save [--patch] [-k|--[no-] keep-index] [-q|--quiet] [<message>]]
--patch 显示工作区和HEAD的差别
-k或--keep-index 保存进度后不会将暂存区重置
5)git stash apply 和stash pop一样,但是不删除恢复的进度
6)git stash drop [<stash>] 删除一个存储的进度。默认删除最新的进度。
7) git stash clear 删除所有储存的进度
13.git push origin yourbranch 上传你的分支至仓库
1)git push -f 强制推送
2) git push origin --delete newName 删除远程分支
14.git pull 更新代码
1) git pull origin branch 从branch上更新到当前分支
从branch上更新的别人的新代码自动放到暂存区中,更改完自己的代码,git add,然后git commit会把更新的夜一起提交上去。
15.git fetch origin 从远程分支拉取代码
git fetch origin branch1:branch2 拉取远程branch1代码 到 本地branch2
git diff temp git merge branch2 git branch -d branch2
16.git merge
1)git merge master 合并master分支至当前分支
2)git merge --no-ff dev --no-ff 分之合并之后,从分支历史上就可以看出分支信息
git rebase develop 移动分支,把当前分支移动到develop分支之后合并
有冲突则解决冲突,然后git rebase --continue
git rebase --abort 终止rebase行动,回到rebase之前的状态。
17.git remote and origin url 关联远程仓库
git remote -v
18.git rev-parse 版本表示法
1)git rev-parse --symbolic --branchs 显示分支
2)git rev-parse --symbolic --tags 显示里程碑
3) 显示为对于哈希值 git rev-parse HEAD
19. git tag
1)git describe 版本号
2)git tag 查看所有标签
-n 查看标签说明
3)git tag <tagname> 创建标签
-a带说明
-m "msg" 带说明
4)git show <tagname> 查看标签信息
5)git tag -d <tagname> 删除标签
6)git push origin <tagname> 本地标签推送至远程
7) git push origin --tags可以推送全部未推送过的本地标签
8) git push origin :refs/tags/<tagname>可以删除一个远程标签
20.git config --global alias.name "git commit -s" 命令别名
例如:name = ci ;git ci = git commit -s
常见问题:
1.更新代码有冲突:
1)、git stash ;git pull; git stash pop
2) 、git add ;git commit;git pull
3) 、git fetch ;git rebase o/master;git push ; rebase 当前分支移动到o/master分支,最后再用 git push 推送到远程仓库。
4)、git fetch;git merge o/master;git push 合并之后多一个分支
5) 、git pull --rebase;git push 没合并,直接移动,少一个分支
更新命令之后:
1.某个文件乱了,想修改这个文件。
1)、只改变工作区 git checkout --file 暂存区文件覆盖工作区文件
2)、同时改变暂存区 1>. git reset HEAD file;git checkout --file 先重置暂存区,再覆盖工作区文件
2>. git checkout origin/develop --file 用服务端develop分支文件覆盖本地的文件
此时文件更改为修改前的,然后你把最新的代码合并进来。
2.用工具解决冲突:tortoisegit,source tree