背景
码农10年,git命令还是经常使用的,这里整理下常用的git命令,用于新人上手。
常用git命令一览:
- 从远端拉一个分支:
git checkout -b accuse origin/accuse
git push origin HEAD -u 【将新建分支推送到远端服务器】
- 从当前分支拉一个分支:
git checkout -b accuse
- 创建分支
git checkout -b new_branch
注意,new_branch的代码来自于当前分支
- 切换分支
git checkout another_bra
和创建分支就差-b参数
5.合并本地分支
git merge b
假设当前分支为dev,上面的命令就是将本地的b分支代码合并到当前分支dev中
6.合并远程分支,和前面的几乎一样,这个比较常用,适合直接合并,不需要再拉一下远端分支。
git merge origin/b
远程分支b被合并到本地当前分支dev中了。
7.git pull / push 使用法
git pull --rebase【 用 rebase 尽量减少多余的 merge commit】
rebase 冲突了, 又不喜欢一步一步的 git rebase 怎么办?
git rebase --abort 放弃本次的git pull --rebase
git reset --hard HEAD 自从最近的一次提交以来在working directory中的任何改变都被丢弃,并把HEAD指向最近的一次提交
git pull
git status
git push 使用方法:
git push [远程仓库名] [分支名]
例如:git push origin master
8.Git Stash使用方法:用于分支切换时,保存暂时的修改, git神器之一
git stash:
备份当前的工作区的内容,从最近的一次提交中读取相关内容,
让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop:
从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。
由于可能存在多个Stash的内容,所以用栈来管理,
pop会从最近的一个stash中读取内容并恢复。
git stash list:
显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
使用’git stash apply stash@{1}’就可以将你指定版本号为stash@{1}的工作取出来
git stash clear:
清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
8.删除本地分支,
git checkout b
git branch -D a
首先切换到别的分支,然后才能删除某个分支
9.删除远程分支
git push origin --delete branch_name
或者
git push origin :branch_name 例如: git push origin :feature/log_repair
10.撤销对一个文件的修改【该文件尚未提交】
git checkout -- filepath/filename
撤销对所有文件的修改 git chenkout .
11.查看提交日志
git log
- 撤销commit的提交,放弃所有改动,不小心合并冲突出错啦,撤销Merge操作,都可以用此命令
git reset --hard HEAD^ 【--hard 表示放弃所有本地改动】
【HEAD是指向最新的提交,上一次提交是HEAD^,上上次是HEAD^^,也可以写成HEAD~2 ,依次类推】
会清空工作区所有的文件修改,慎重使用!!
注:回退到指定的版本 git reset --hard <哈希值>
13.撤销commit的提交,保存已有改动【建议使用】
git reset --soft HEAD^
index和working directory中的内容不作任何改变,仅仅把HEAD指向要变更的版本。
这个模式的效果是,执行完毕后,自从<commit>提交的版本以来的所有改变都会显示在git status的"Changes to be committed"中。
14.恢复 git reset -hard 的误操作
git reflog
git reset --hard 版本号
注意:虽然可以恢复至提交版本所在位置,但是,未提交的、暂存区,工作目录,都消失了
15.新建仓库【将本地初始化的工程推到远端的仓库】
cd 工作目录
git init
git remote add [name] [url]
//例子: git remote add origin【远端仓库别名一般为origin】 [email protected]:flightqmd/flight_sync_data.git 【远端仓库地址】
git add .
git ci -am "初始化"
git push origin HEAD -u
16.在项目根目录下添加.gitignore,这样不会什么文件都提交上去
开始行,结束行 不需要任何标记
<=====//不需要
# maven ignore
target/
# eclipse ignore
.settings/
.project
.classpath
# idea ignore
.idea/
*.ipr
*.iml
*.iws
# temp ignore
*.log
*.cache
*.diff
*.patch
*.tmp
# system ignore
.DS_Store
Thumbs.db
# package ignore (optional)
# *.jar
# *.war
# *.zip
# *.tar
# *.tar.gz
#maven project
catalina.base_IS_UNDEFINED/
*.orig
=====>//不需要
17.显示本地分支和服务器分支的映射关系 ,可以查看分支是否有远端分支映射
git branch -vv
18…建立本地分支和服务器分支的映射关系
git branch --set-upstream-to=origin/<远端branch_name> <本地branch_name>
输出结果:Branch h5_dev set up to track remote branch h5_dev from origin.
git branch --set-upstream-to=origin/feature/zero_coupon_0814 feature/zero_coupon_0814
18.将远端分支拉到本地,并建立关联关系track:
git checkout --track origin/jiangbo_dev
19.远程分支的删除与同步:
删除命令:
git push origin :branch_name 或者 git push origin --delete branch_name
20.重新定义分支 基准 线:
git rebase -i master
例子 : git:(feature/log_repair) git rebase -i master
当前分支为 feature/log_repair ,将分支的基线 设置为当前master 位置。
解释:假设 feature/log_repair 分支是在 2017-06-01 从master 拉的分支 ,一直没有merge过master
假设 2017年7月1日,执行git rebase -i master ,那么这个命令会自动merge master 这一个月的修改,并把基线设置为 当前master 的提交节点。[当然,这个命令会产生冲突]
注意:使用完该命令,会使本地分支跟远端分支,不一样,删除远端分支,将新分支推向远端
21.删除不存在对应远程分支的本地分支
git remote show origin 查看远程分枝状态:
执行 git remote prune origin 或者 git fetch -p 删除远程不存在的远程跟踪分支
22:删除远端合过master的分支
git branch -r --merged master | grep -vE 'HEAD|master|staging|qa|dev' | awk -F'origin/' '{print $2}' | xargs -I {} git push origin :{}
23:删除本地合过master的分支
git branch --merged master | grep -vE 'HEAD|master|staging|qa|dev' | xargs git branch -d
-d : 如果没有合并过master 会提醒
-D: 不提醒 直接删除
后续会持续补充好玩儿的命令~
待续…