您的位置:首页 > 其它

GIT 常用命令整理

2015-06-29 14:50 225 查看
**

常用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一些相关信息.

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