GIT 常用命令整理
2015-06-29 14:50
225 查看
**
git与svn一样都是基于仓库来管理代码的,不过git的仓库在客户端和服务端都是存在的,我们通常都是在本地进行代码commit,然后再提交到远端服务器仓库的;而svn的话,差不多相当于大家一群人都在仓库远端的一个仓库,在本地进行commit,马上主动推送到远端仓库,灵活性稍差点;
在本地生成一个仓库(一般就是一个项目等)
A:本地初始化一个文件夹为一个仓库,让git把这个文件夹当作一个仓库进行操作;
1) git init
2)git remote add origin git@github.com:Hinsteny/Test.git
为刚刚初始化的仓库添加一个远程仓库联系,这样我们就能把本地的代码提交到远程了哈
B:直接在本地clone一个远程仓库,即把远程仓库的所有受管理文件复制到本地,然后进入仓库根目录就可以进行相关操作,比如修改(编写自己的代码),推送(更新自己的代码到远程服务器);
1) git clone git@github.com:Hinsteny/Test.git
2)cd Test
现在就能在修改clone下的仓库(Test里面)下面的文件了。
对本地仓库内容进行修改
A:git在本地修改时是基于branch进行操作的,每个branch可以保留不一样的副本;
1) 新建分支: git branch branch_name
2)查看本地所有分支列表: git branch -a
3)切换到要进行操作的分支: git checkout branch_name
4)跳过创建分支的步骤,直接创建并切换到新分支: git checkout -b branch_name
B:在当前分支上,对受管理的文本文件做一些修改,然后就可以commit到当前分支上;
1) 先把修改添加到缓存: git add file_url_name (只是添加一个文件,git add . 命令可以把当前分支上的所有修改添加到缓存)
2)把已经添加到缓存的内容进行commit: git commit -m “commit_content”
3)此时就可以把当前分支的内容进行推送或者检出打包,合并等操作了。
提交本地代码到远程仓库
命令: git push [remote_name] [local_branch]:[remote_brnach]
命令的含义:把本地的[local_branch]上的内容更新到[remote_name]仓库的[remote_brnach]上面;
remote_name->某个远端的remote地址在本地对应的名称;
local_branch->本地仓库的某个分支名称;
remote_brnach->远端仓库的某个分支名称;
注:上面命令可以简写为 “git push”,默认为 “oringin, local/master, origin/master”, 设置本地的某个分支为本地的master分支的命令是:git push –set-upstream oringin/master
拉取远程的内容到本地
1) git pull [remote_name] [remote_brnach]:[local_branch]
2) git fetch [remote_name] [remote_brnach]:[local_branch]
本地修改的相关操作
1) 取消对文件的修改。放弃未提交的修改,还原到最后一次commit后的状态。
git checkout – [file-path-name]
2) 还原被加入缓存状态文件的状态。即,撤销之前的add操作
git reset head – [file-path-name]
3) 撤销所有本地修改
git reset head – [file-path-name]
4) 回退所有内容到上一个版本
git reset head^
5) 回退某个文件的版本到上一个版本
git reset HEAD^ [file-path-name]
6) 向前回退到第X个版本
git reset –soft HEAD~3
7) 将本地的状态回退到和远程的某个分支一样
git reset –hard origin/master
8) 回退到某个具体的版本
git reset version-number
回滚本地提交
1) git reset –hard commit-id: 强制把当前分支回滚到所指定的commit记录;
git reset –hard HEAD~3: 将最近3次的提交回滚;
2) git reset –soft head^: 将最近1次的提交软回滚;
git reset –soft head~3:将最近3次的提交软回滚;
注: hard方式的回滚会直接抹消被回滚的commit的修改;而soft方式的话,只会把当前分支的commit指向回滚到的位置,然后被回滚的所有commit的修改会依然保存在本地,以git缓存的方式存在;
合并冲突
1) git merge [branch_name] :把当前分支与目标分支合并,把当前分支超前的commit追加到目标分支的commit之后,最后还有一个“Merge branch”的commit哈
解决完冲突后,在commi历史中会多一个merge的commit,里面可能包含一些冲突解决时代码的取舍痕迹。
2) git rebase [branch_name] :把当前分支与目标分支合并,把当前分支超前的commit追加到目标分支的commit之后
解决完冲突后,在commit历史上看不出有合并的痕迹。
打包本地的commit生成相关commit文件以便直接传送补丁
1) git format-patch -[number] :number表示打包的补丁从最后一次commit向前数一共生成多少个commit的补丁。执行完命令后,会在当前仓库的根目录下生成对应的补丁文件(文件名称一般会包含一部分commit的描述内容,方便区分)。
git format-patch –[number] commit-id :某次提交之前的所有patch
git format-patch -M master :打包当前分支所有超前master的commit
git format-patch -s commit-id :某次提交以后的所有patch
2)git apply –stat patch_url :检查一个补丁文件的状态,会看到这个补丁里面包含哪些修改的内容概括
3)git apply –check patch_url :检查一个补丁文件是否可以成功打补丁到当前分支上面(可以的话,就可以直接应用补丁成功;否则进行应用的补丁过程中就需要解决冲突哈)
4)git am patch_url :把一个补丁文件里面的修改应用到当前分支上面哈
合并时,如果有冲突如何解决?
1)在使用 “git rebase” 命令时,当不能顺利的进行合并时,那就是有冲突了,这个时候就定位到两个分支有冲突的公共地方,主动的进行取舍保留,确定好要保存的版本快照后,回到命令行,执行 “git add .”把解决分支产生的修改添加到缓存中,然后再执行 “git rebase –continue”,完美解决冲突,哈哈
2)在使用 “git am” 命令时,当不能顺利的把补丁文件应用到当前分支上时,那就是有冲突了,这个时候就定位到有冲突的公共地方,主动的进行取舍保留,确定好要保存的版本快照后,回到命令行,执行 “git add .”把解决分支产生的修改添加到缓存中,然后再执行 “git am –continue”,就这么解决冲突,哈哈
git库所在的文件夹(即.git所在的文件夹)中的文件包含四种状态。
1)untracked:未跟踪,此文件在文件夹中,但并没有加入git库,不参与版本控制。 通过”git add”,”git commit”可将它置入版本管理库。
2)unmodify:文件已经库中,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两个去处,如果它被修改,而成为modified。如果使用”git rm”移出版本库,则成为untracked文件。
3)modified:文件已修改,仅仅是修改,并没有进行其它操作。这个文件也有两个去处,通过”git add”可进入暂存(staged)状态,使用”git checkout”则丢弃修改,返因到unmodify状态。这个checkout很好理解,就是取出库中文件,覆盖当前文件吧。
4)staged:暂存状态。执得”git commit”则将修改同步到库中,这时库中的文件与本地文件又一致了,于是文件是unmodify状态。执行”git reset HEAD filenam”取消暂存,文件状态变为modified。
注:如果你是用在wins下面,适用powershell打开git shell命令行,那这几种状态可以随时看到的,”untracked”一般是红色的”+number”(数字表示有多少个文件未被加入版本库),”unmodify”就是正常状态,没什么特别显示,”modified”一般是红色的”~number”(数字表示有多少个文件被修改了),”staged”一般是绿色的(表示对应的文件已经被加入了git暂存中);
撤销本地工作目录中当前分支上的修改
1)git reset –hard origin/master :强制回滚到master分支的最后一次commit,这种方法就是找一个历史节点进行强制状态回滚。这个操作会清除”修改,删除”两种更改,但不会清除”添加”这种修改;(并不提倡这种方式)
2)git checkout – . :这个操作会清除当前分支上的”修改,删除”两种更改,但不会清除”添加”这种修改;这个命令也可以是”git checkout – file_url”,针对性的对某个文件进行修改撤销,但是它依然不能对一个新增加的文件进行撤销,猜测可能是因为新加文件还没有被纳入git版本管理中去,没有历史快照给它做参考进行回滚撤销(git对工作目录中未加入版本管理的文件好像没有删除的命令,这里可以用系统的删除命令进行删除,rm);
3)git reset HEAD file_url :将对应已经加入git暂存的文件恢复到modified状态;
git tag(标签),可以在一定的时期对commit设置历史关键点,常常用来进行标志版本发布点.
1) git tag (-l): 显示当前版本库的所有标签列表.
2) git tag tag_name: 截止当前分支最后一个commit创建一个新的tag.
3) git tag -a tag_name -m ‘tag_commit′: 创建一个带备注信息的tag.
4) git push tag: 把本地的所有标签推送到远程服务器上面.
5) git show tag_name: 显示一个tag一些相关信息.
待续
常用git命令,欢迎大家参考,也方便自己查看!
**git与svn一样都是基于仓库来管理代码的,不过git的仓库在客户端和服务端都是存在的,我们通常都是在本地进行代码commit,然后再提交到远端服务器仓库的;而svn的话,差不多相当于大家一群人都在仓库远端的一个仓库,在本地进行commit,马上主动推送到远端仓库,灵活性稍差点;
在本地生成一个仓库(一般就是一个项目等)
A:本地初始化一个文件夹为一个仓库,让git把这个文件夹当作一个仓库进行操作;
1) git init
2)git remote add origin git@github.com:Hinsteny/Test.git
为刚刚初始化的仓库添加一个远程仓库联系,这样我们就能把本地的代码提交到远程了哈
B:直接在本地clone一个远程仓库,即把远程仓库的所有受管理文件复制到本地,然后进入仓库根目录就可以进行相关操作,比如修改(编写自己的代码),推送(更新自己的代码到远程服务器);
1) git clone git@github.com:Hinsteny/Test.git
2)cd Test
现在就能在修改clone下的仓库(Test里面)下面的文件了。
对本地仓库内容进行修改
A:git在本地修改时是基于branch进行操作的,每个branch可以保留不一样的副本;
1) 新建分支: git branch branch_name
2)查看本地所有分支列表: git branch -a
3)切换到要进行操作的分支: git checkout branch_name
4)跳过创建分支的步骤,直接创建并切换到新分支: git checkout -b branch_name
B:在当前分支上,对受管理的文本文件做一些修改,然后就可以commit到当前分支上;
1) 先把修改添加到缓存: git add file_url_name (只是添加一个文件,git add . 命令可以把当前分支上的所有修改添加到缓存)
2)把已经添加到缓存的内容进行commit: git commit -m “commit_content”
3)此时就可以把当前分支的内容进行推送或者检出打包,合并等操作了。
提交本地代码到远程仓库
命令: git push [remote_name] [local_branch]:[remote_brnach]
命令的含义:把本地的[local_branch]上的内容更新到[remote_name]仓库的[remote_brnach]上面;
remote_name->某个远端的remote地址在本地对应的名称;
local_branch->本地仓库的某个分支名称;
remote_brnach->远端仓库的某个分支名称;
注:上面命令可以简写为 “git push”,默认为 “oringin, local/master, origin/master”, 设置本地的某个分支为本地的master分支的命令是:git push –set-upstream oringin/master
拉取远程的内容到本地
1) git pull [remote_name] [remote_brnach]:[local_branch]
2) git fetch [remote_name] [remote_brnach]:[local_branch]
本地修改的相关操作
1) 取消对文件的修改。放弃未提交的修改,还原到最后一次commit后的状态。
git checkout – [file-path-name]
2) 还原被加入缓存状态文件的状态。即,撤销之前的add操作
git reset head – [file-path-name]
3) 撤销所有本地修改
git reset head – [file-path-name]
4) 回退所有内容到上一个版本
git reset head^
5) 回退某个文件的版本到上一个版本
git reset HEAD^ [file-path-name]
6) 向前回退到第X个版本
git reset –soft HEAD~3
7) 将本地的状态回退到和远程的某个分支一样
git reset –hard origin/master
8) 回退到某个具体的版本
git reset version-number
回滚本地提交
1) git reset –hard commit-id: 强制把当前分支回滚到所指定的commit记录;
git reset –hard HEAD~3: 将最近3次的提交回滚;
2) git reset –soft head^: 将最近1次的提交软回滚;
git reset –soft head~3:将最近3次的提交软回滚;
注: hard方式的回滚会直接抹消被回滚的commit的修改;而soft方式的话,只会把当前分支的commit指向回滚到的位置,然后被回滚的所有commit的修改会依然保存在本地,以git缓存的方式存在;
合并冲突
1) git merge [branch_name] :把当前分支与目标分支合并,把当前分支超前的commit追加到目标分支的commit之后,最后还有一个“Merge branch”的commit哈
解决完冲突后,在commi历史中会多一个merge的commit,里面可能包含一些冲突解决时代码的取舍痕迹。
2) git rebase [branch_name] :把当前分支与目标分支合并,把当前分支超前的commit追加到目标分支的commit之后
解决完冲突后,在commit历史上看不出有合并的痕迹。
打包本地的commit生成相关commit文件以便直接传送补丁
1) git format-patch -[number] :number表示打包的补丁从最后一次commit向前数一共生成多少个commit的补丁。执行完命令后,会在当前仓库的根目录下生成对应的补丁文件(文件名称一般会包含一部分commit的描述内容,方便区分)。
git format-patch –[number] commit-id :某次提交之前的所有patch
git format-patch -M master :打包当前分支所有超前master的commit
git format-patch -s commit-id :某次提交以后的所有patch
2)git apply –stat patch_url :检查一个补丁文件的状态,会看到这个补丁里面包含哪些修改的内容概括
3)git apply –check patch_url :检查一个补丁文件是否可以成功打补丁到当前分支上面(可以的话,就可以直接应用补丁成功;否则进行应用的补丁过程中就需要解决冲突哈)
4)git am patch_url :把一个补丁文件里面的修改应用到当前分支上面哈
合并时,如果有冲突如何解决?
1)在使用 “git rebase” 命令时,当不能顺利的进行合并时,那就是有冲突了,这个时候就定位到两个分支有冲突的公共地方,主动的进行取舍保留,确定好要保存的版本快照后,回到命令行,执行 “git add .”把解决分支产生的修改添加到缓存中,然后再执行 “git rebase –continue”,完美解决冲突,哈哈
2)在使用 “git am” 命令时,当不能顺利的把补丁文件应用到当前分支上时,那就是有冲突了,这个时候就定位到有冲突的公共地方,主动的进行取舍保留,确定好要保存的版本快照后,回到命令行,执行 “git add .”把解决分支产生的修改添加到缓存中,然后再执行 “git am –continue”,就这么解决冲突,哈哈
git库所在的文件夹(即.git所在的文件夹)中的文件包含四种状态。
1)untracked:未跟踪,此文件在文件夹中,但并没有加入git库,不参与版本控制。 通过”git add”,”git commit”可将它置入版本管理库。
2)unmodify:文件已经库中,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两个去处,如果它被修改,而成为modified。如果使用”git rm”移出版本库,则成为untracked文件。
3)modified:文件已修改,仅仅是修改,并没有进行其它操作。这个文件也有两个去处,通过”git add”可进入暂存(staged)状态,使用”git checkout”则丢弃修改,返因到unmodify状态。这个checkout很好理解,就是取出库中文件,覆盖当前文件吧。
4)staged:暂存状态。执得”git commit”则将修改同步到库中,这时库中的文件与本地文件又一致了,于是文件是unmodify状态。执行”git reset HEAD filenam”取消暂存,文件状态变为modified。
注:如果你是用在wins下面,适用powershell打开git shell命令行,那这几种状态可以随时看到的,”untracked”一般是红色的”+number”(数字表示有多少个文件未被加入版本库),”unmodify”就是正常状态,没什么特别显示,”modified”一般是红色的”~number”(数字表示有多少个文件被修改了),”staged”一般是绿色的(表示对应的文件已经被加入了git暂存中);
撤销本地工作目录中当前分支上的修改
1)git reset –hard origin/master :强制回滚到master分支的最后一次commit,这种方法就是找一个历史节点进行强制状态回滚。这个操作会清除”修改,删除”两种更改,但不会清除”添加”这种修改;(并不提倡这种方式)
2)git checkout – . :这个操作会清除当前分支上的”修改,删除”两种更改,但不会清除”添加”这种修改;这个命令也可以是”git checkout – file_url”,针对性的对某个文件进行修改撤销,但是它依然不能对一个新增加的文件进行撤销,猜测可能是因为新加文件还没有被纳入git版本管理中去,没有历史快照给它做参考进行回滚撤销(git对工作目录中未加入版本管理的文件好像没有删除的命令,这里可以用系统的删除命令进行删除,rm);
3)git reset HEAD file_url :将对应已经加入git暂存的文件恢复到modified状态;
git tag(标签),可以在一定的时期对commit设置历史关键点,常常用来进行标志版本发布点.
1) git tag (-l): 显示当前版本库的所有标签列表.
2) git tag tag_name: 截止当前分支最后一个commit创建一个新的tag.
3) git tag -a tag_name -m ‘tag_commit′: 创建一个带备注信息的tag.
4) git push tag: 把本地的所有标签推送到远程服务器上面.
5) git show tag_name: 显示一个tag一些相关信息.
待续
相关文章推荐
- SVN
- 57 mysql 导出表结构
- 118.在数组中找出最大元素
- OracleSQL运算符优先级
- code_seg("INIT")
- UML期末复习题——2.4:Domain Model
- 存储过程中使用事务的“正规”写法
- C语言逆序输出某个数字
- 无效 URI: 故障分析证书颁发机构/主机
- [转]使用maven镜像
- 运维之Linux服务器监控方案
- Advanced Rest Client 模拟用户请求工具
- Oracle函数返回表类型
- android 关于将应用添加到系统的 分享.. 或者 发送到.. 中
- java学习之旅42--面向对象_15_继承_组合
- Android初学笔记——xml文件的读写
- Python正则表达式指南
- 警告: Unsupported configuration plain style unsupported in a navigation item
- 在Linux系统的命令行中为MySQL创建用户的方法
- Linux slab 分配器剖析