git实用命令
clone仓库
git clone http://fairyfar@xxx.xxx.xxx.xxx:9090/scm/ofs/ofs.git
查看log
git log #查看当前分支log
git log origin/feature/XXX #查看远程分支log
查看分支
git branch #仅显示本地分支
git branch -a #显示全部分支,含远程分支。
git branch -vv #显示本地分支与远程分支对应关系
从远程分支创建一个本地分支
git checkout -b 本地分支名称 origin/feature/XXX
临时checkout指定版本
已知commit id,可以临时checkout该提交。
git checkout commit_id
当不再需要该临时本地分支时,直接checkout到其它本地分支即可。
删除本地分支
git push origin 本地分支名称:feature/XXX #假设希望的远程分支全称为:origin/feature/XXX
本地分支关联到远程分支
git branch --set-upstream-to=origin/remote_branch 本地分支名
切换到已存在的本地分支
git branch -D 本地分支名称 #-D是强制删除,会忽略本地修改。
从本地分支创建一个远程分支
git push origin 本地分支名称:feature/XXX #假设希望的远程分支全称为:origin/feature/XXX
这也是push本地commit到远程分支的方法。
删除远程分支
git push origin --delete feature/XXX
合并(merge)远程分支到本地分支
git merge remote_branch #合并可能会产生冲突,需要解决冲突。
合并(merge)分支时忽略行结尾符差异
git merge --no-ff -Xignore-space-at-eol some-branch
-Xignore-space-at-eol这个参数会忽略文件结尾符比较。
修改本地分支log(尚未push到远程分支)
git commit --amend
合并本地分支的多次提交(commit)
本地开发过程中,可能commit多次,但是后来我们希望将多次commit合并为一个再push到远程分支,表现为log中的多个记录合成一个。
首先,
git log # 查看log,假设commit_id1 和 commit_id2希望合并,那么我需要记住commit_id2后面的commit_id3。
然后,
git rebase -i commit_id3
编辑时,按照命令说明修改。保存退出。
临时保存本地修改
git stash #将本地修改(尚未commit)临时保存到stash中
git stash list #列出所有stash
git stash pop #恢复stash
git stash apply #应用stash,会从stash中清除。
git stash show -p SN #显示索引号为SN的stash记录的diff
撤除本地没有提交的修改
git checkout 要撤销的文件或文件夹
删除untrack文件和文件夹
git clean -df #删除当前目录下untrack文件和文件夹,不包括.gitignore中指定的。
git clean -f #删除当前目录下untrack文件,不包括文件夹和.gitignore中指定的。
git clean -xdf #删除当期目录下的所有untrack的文件和文件夹
撤销git commit
已经commit到本地分支,尚未push到远程分支。
git reset --soft HEAD^ # HEAD^是上一个版本,也可以写成HEAD~1。
git reset --hard HEAD^ # hard删除工作空间改动代码,撤销git add。
撤销git push
已经push到远程分支,有两种方式撤销。
方法1:
先使用上述撤销commit的方法,然后重新提交。
方法2:
git revert commit_id。
git push不输入密码
git config credential.helper store
这样仅在第一次push时输入密码,下次就不用输入了。
git合并指定的commit
有时我们不希望merge某个分支的全部变更,只是想把某次commit合并过来。
git cherry-pick commit_id # 合并指定的某次commit
git commit模板
每次commit代码时,都需要按格式填写commit message,因为格式固定,所以我们可以使用commit message template。
创建模板:
vi ~/.git_commit_template
编写模板,例如:
[KEYWORDS ] ci-
[TO SOLVE] X100-
[TEST SUGGESTION]
然后vi ~/.gitconfig,编辑以下内容:
[commit]
template = ~/.git_commit_template
这样,每次git commit会自动应用上述模板。
删除远程分支后,本地还是能看到远程分支名。
git branch -a # 还是可以看到远程分支名称,但是远程分支已删除。
git remote show origin # 可以查看远程地址,远程分支,还有本地分支与之相对应关系等信息。
git remote prune origin # 本地删除远程不存在的分支