您的位置:首页 > 其它

git 常用命令使用实践总结-wish

2016-03-22 00:00 621 查看
关于GIT:
git是一个开源分布式版本控制系统:客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。git优点:速度快、设计简单、对非线性开发模式的强力支持(允许上千个并行开发的分支)、完全分布式、有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)。Git 和其他版本控制系统的主要差别:Git只关心文件数据的整体是否发生变化,每次计算整体数据的SHA1值是否有变化,再来确定整体状态有无更新变化。而大多数其他系统则只关心文件内容的具体差异(CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。
1、首先附上本地wish-openstack git 代码源地址:

git clone git@192.168.1.175:openstack/horizon-2014-1-1.gitgit clone git@192.168.1.175:openstack/nova-2014-1-1.gitgit clone git@192.168.1.175:openstack/python-novaclient-2-17-0.gitgit clone git@wishi.gitlab.com:openstack/keystone-2014-2-b1.gitgit clone git@wishi.gitlab.com:openstack/python-keystoneclient-0-9-0.gitgit clone git@wishi.gitlab.com:openstack/ceilometer-2014-1-1.gitgit clone git@wishi.gitlab.com:openstack/python-neutronclient-2-3-4.gitgit clone git@wishi.gitlab.com:openstack/python-glanceclient-0-12-0.gitgit clone git@wishi.gitlab.com:openstack/neutron-2014-1-1.gitgit clone git@wishi.gitlab.com:openstack/glance-2014-2-b1.gitgit clone git@wishi.gitlab.com:openstack/unitelog.git

注:使用账户密码方式:(pwd:yjs)
git clone -b dev git@wishi.gitlab.com:/var/opt/gitlab/git-data/repositories/openstack/nova-2014-1-1.git nova-2014-1-1-dev

2、git 已经存在master主分支情况下,新建dev开发分支及使用:(以nova为例)
1、将nova代码clone到本地:git clone git@wishi.gitlab.com:openstack/nova-2014-1-1.git2、进入nova文件夹,新建分支:cd nova-2014-1-1git branch dev (默认此dev父分支为当前分支)从某个tag处创建分支:git branch <branch_name> <tag_name>3、 查看所有分支,检测分支是否创建成功git branch -a4、将本地新建的分支push到远端代码库:git push origin dev5、如果需要clone 开发分支代码,使用如下命令:git clone -b dev git@wishi.gitlab.com:openstack/nova-2014-1-1.git6、开发分支提交代码,使用如下命令:git add .git commit -m "test commit"git push origin dev备注,以后所有的代码开发都只能在dev分支上面,master只能保存发布版本合并代码
3、删除git分支:
删除本地分支:git branch -d you_branch_name(强制删除用-D)删除远程分支:git push origin :you_branch_name举例删除nova 远程的dev分支

4、强行用远程代码覆盖本地:

方法1:git 放弃本地修改 强制更新
git fetch --all git reset --hard origin/master
git fetch 只是下载远程的库的内容,不做任何的合并 git reset 把HEAD指向刚刚下载的最新的版本(git pull 则会将远程代码合并进本地库)

5、回到初始状态:假若初始建立了一个初始的空commit,之后就可以通过重新设置来清空一个分支,然后使用hard重置分支到刚刚创建的初始commit:
git reset --hard <initial_commit SHA1 值>
6、git打tag方法:
命令的tag打法:git tag -a v1.0.0-t1 -m "the v1.0.0 tag"git push origin v1.0.0-t1git push origin --tags //一次性推送所有标签
图形(git图形gitlab:https://about.gitlab.com/):
7、为之前提交记录补打tag:
首先用git log -2得到commit 的SHA1值然后git tag v-test-after-tag 4640383fde2566fcbf04e6e64acc6bd68af01e8c
8、查看分支:

-a参数可以查看远程分支,当前分支前面加有*号标记,远程分支会用红色表示出来(如果你开了颜色支持的话):
12345678910# git branch -amasterremotetungwayv1.52* zrongremotes/origin/masterremotes/origin/tungwayremotes/origin/v1.52remotes/origin/zrong

9、删除远程分支及tag:
在Git v1.7.0 之后,可以使用这种语法删除远程分支:
1git push origin --delete <branchName>
删除tag这么用:
1git push origin --delete tag <tagname>
否则,可以使用这种语法,推送一个空分支到远程分支,其实就相当于删除远程分支:
1git push origin :<branchName>
这是删除tag的方法,推送一个空tag到远程tag:
12git tag -d <tagname>git push origin :refs/tags/<tagname>
两种语法作用完全相同。
10、根据tag得到SHA1值:
git show 2014.1.1
11、重新编辑上一次已经被commit的文件信息:(重新编辑上一次commit的注释等)
git commit --amend
12、已经通过git add 加入到暂存区的文件,撤销回来:
git reset HEAD <file-name>
13、取消对文件的修改
git checkout -- <file>
14、查看当前的远程库
git remote -v至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库
15:添加及操作远程仓库
$ git remote (查看)origin (显示只有一个origin分支)$ git remote add pb git://github.com/paulboone/ticgit.git (添加一个远程分支pb)$ git remote -v (再次查看)origin git://github.com/schacon/ticgit.gitpb git://github.com/paulboone/ticgit.git现在可以用字串 pb 指代对应的仓库地址了。比如说,要抓取所有 pb有的,但本地仓库没有的信息,可以运行 git fetch pb:$ git fetch pbremote: Counting objects: 58, done.remote: Compressing objects: 100% (41/41), done.remote: Total 44 (delta 24), reused 1 (delta 0)Unpacking objects: 100% (44/44), done.From git://github.com/paulboone/ticgit* [new branch] master -> pb/master* [new branch] ticgit -> pb/ticgitfetch 、pull区别:
fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。如果设置了某个分支用于跟踪某个远端仓库的分支,可以使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。该命令其实相当于git fetch 和 git merge
16、远程仓库的删除和重命名
git remote rename pb paulgit remote rm paul
17、推送数据到远程仓库
git push [remote-name] [branch-name]也可以:git push [远程名] [本地分支]:[远程分支](显式指定本地分支)
18、分支合并(将dev分支合并到master分支)
git checkout mastergit merge dev假若合并有冲突则用git status查看冲突文件,手动解决完冲突之后,使用git add 则将冲突文件标注为已解决冲突,并加入到暂存目录中等待commitgit branch --merged //查看哪些分支已经与当前分支合并了git branch --no-merged //查看哪些分支还没有与当前分支合并了
19、分支整合
方法一: merge(合并)最容易的整合分支的方法是 merge 命令,它会把两个分支最新的快照以及二者最新的共同祖先进行三方合并
方法二: rebase(衍合)把在一个分支里提交的改变在另一个分支里重放一遍。ex:git rebase --onto master server client这基本上等于在说“检出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍”永远不要衍合那些已经推送到公共仓库的更新。在衍合的时候,实际上抛弃了一些现存的 commit 而创造了一些类似但不同的新 commit。如果你把commit推送到某处然后其他人下载并在其基础上工作,然后你用 git rebase 重写了这些commit 再推送一次,你的合作者就不得不重新合并他们的工作,这样当你再次从他们那里获取内容的时候事情就会变得一团糟。
20、git发布版本归档:
git archive -o last.zip HEAD 基于最新提交建立归档文件last.zip
22、所有可从dev分支中获得而不能从master分支中获得的提交
git log master..dev
23、git本地回滚,及远程回滚
本地回滚:
git reset --hard commit-id :回滚到commit-id,将commit-id之后提交的commit都去除git reset --hard HEAD~3:将最近3次的提交回滚
远程回滚:(原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支)
git checkout branch_namegit pullgit branch branch_backup //备份一下这个分支当前的情况git reset --hard commit_id //将branch_name本地回滚到commit_idgit push origin :branch_name //删除远程 branch_name分支git push origin branch_name //用回滚后的本地分支重新建立远程分支git push origin :branch_backup //如果前面都成功了,删除这个备份分支
24、git误操作,如何查找误操作的commit-id
git reflog
25、
$git config --global core.autocrlf true
# Configure Git on Windows to properly handle line endings
解释:core.autocrlf是git中负责处理line endings的变量,可以设置三个值--true,inout,false.设置成三个值会有什么效果呢?If
core.autocrlf
is set to true, that means that any time you add a file to the git repo that git thinks is a text file, it will turn all CRLF line endings to just LF before it stores it in the commit.。设置为true,添加文件到git仓库时,git将其视为文本文件。他将把crlf变成lf。【2】If
core.autocrlf
is set to false, no line-ending conversion is ever performed, so text files are checked in as-is. This usually works ok。【2】设置为false时,line-endings将不做转换操作。文本文件保持原来的样子。设置为input时,添加文件git仓库石,git把crlf编程lf。当有人Check代码时还是lf方式。因此在window操作系统下,不要使用这个设置。这是参考文献2给的解释希望能帮助大家。Yet another way to show how
autocrlf
works
1) true:             x -> LF -> CRLF
2) input:            x -> LF -> LF
3) false:            x -> x -> x
where x is either CRLF (windows-style) or LF (unix-style) and arrows stand for
file to commit -> repository -> checked out file
初始化,创建git代码库:(test.git先在远程创建好(gitlab页面))– EditGit global setup:
git config --global user.name "tantexian" git config --global user.email "tantexian@163.com"
Create Repository
mkdir test cd test git init touch README git add README git commit -m 'first commit' git remote add origin git@wishi.gitlab.com:tantexian/test.git git push -u origin master
Existing Git Repo?
cd existing_git_repo git remote add origin git@wishi.gitlab.com:tantexian/test.git git push -u origin master

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: