git常用命令:
一.检出仓库
执行如下命令以创建一个本地仓库的克隆版本:
git clone /path/to/repository
如果是远端服务器上的仓库,你的命令会是这个样子:
git clone username@host:/path/to/repository
git pull拉取当前分支代码
将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
git pull origin master:brantest
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin master
二、查看远程分支的方法
要查看远程分支,需要使用Git命令行。以下是常用的查看远程分支的方法。
1、查看远程分支列表
使用以下命令可以查看远程分支列表。
git branch -r
如果需要查看本地和远程分支,可以使用以下命令。
git branch -a
2、查看远程分支的详细信息
使用以下命令可以查看远程分支的详细信息。
git remote show origin
其中,origin是Git默认的远程仓库名称。如果需要查看其他远程仓库的分支信息,则需要将origin替换为对应的远程仓库名称。
3、查看本地分支对应的远程分支
git branch -vv
查看某个特定本地分支对应的远程分支
git branch -vv | grep <本地分支名>
4、获取远程分支的代码
要查看远程分支的代码,需要先将远程分支代码同步到本地。使用以下命令将远程分支同步到本地分支。
git checkout -b <本地分支> origin/<远程分支>
其中,<本地分支>是要创建的本地分支名,<远程分支>是要同步的远程分支名。
同步完后,要查看本地分支的代码,可以使用以下命令。
git checkout <本地分支>
5.查看最近分支代码提交
这个命令会列出所有本地分支的最近提交,并按提交日期排序:
git for-each-ref --sort=-committerdate refs/heads/ --format="%(committerdate:short) %(refname:short) [%(committername)]"
这将列出所有远程跟踪分支的最新提交,并按提交日期排序。请注意,这可能包括很多分支,并且输出会比较长:
git for-each-ref --sort=-committerdate refs/remotes/ --format="%(committerdate:short) %(refname:short) [%(committername)]"
三、添加与提交
你可以计划改动(把它们添加到缓存区),使用如下命令:
git add <filename>
git add *
这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
git commit -m "代码提交信息"
现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。
四、git push(推送改动)
你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库:
git push origin master
可以把 master 换成你想要推送的任何分支。
如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:
git remote add origin <server>
如此你就能够将你的改动推送到所添加的服务器上去了。
五、git checkout(替换本地改动)
假如你做错事(自然,这是不可能的),你可以使用如下命令替换掉本地改动:
git checkout -- <filename>
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到缓存区的改动,以及新文件,都不受影响。
从远程分支origin/branch,创建newbranch本地分支
git checkout -b newbranch origin/branch
六、.冲突解决
方法一:
git pull 出现冲突后丢弃本地冲突文件修改,采用远程文件覆盖本地文件
git checkout [文件路径]
例:git checkout test/src/xxxxxx.cpp
方法二:
git pull 出现冲突后可以暂存本地修改git stash ,然后git pull 更新代码,git stash list 可查看暂存记录列表,释放本地暂存 git stash apply stash@{0} ,出现冲突文件,找到并解决,然后可以提交git add . 加入索引库,然后本地提交git commit -m '注释' 最后git push到远程
方法三:
1、git pull(更新代码,发现)
error: Your local changes to the following files would be overwritten by merge:xxxxxx.cpp
Please commit your changes or stash them before you merge.
这说明你的xxxxxx.cpp与远程有冲突,你需要先提交本地的修改然后更新。
2、git add xxxxxx.cpp
git commit -m '冲突解决
提交本地的xxxxxx.cpp文件,不进行推送远程
3、git pull(更新代码)
Auto-merging xxxxxx.cpp
CONFLICT (content): Merge conflict in xxxxxx.cpp
Automatic merge failed; fix conflicts and then commit the result.
更新后你的本地分支上会出现 (develop|MERGING)类似这种标志
4、找到你本地的xxxxxx.cpp文件,并打开
你会在文件中发现<<<<<<< HEAD ,======= ,>>>>>>> 418ecd9f9db1b2594dd788131599cabf49cd6723
这种标记,<<<<<<< HEAD和=======中间的是你自己的代码, ======= 和>>>>>>>中间的是其他人修改的代码
自己确定保留那一部分代码,最后删除<<<<<<< HEAD ,======= ,>>>>>>>这种标志
5、git add xxx.cpp
git commit -m '冲突解决结束'
再次将本地的xxxxxx.cpp文件提交
6、git push
将解决冲突后的文件推送到远程
七、创建新分支
创建分支
git branch <branch>
切换到新分支
git checkout <branch>
创建并切换到新分支(上面两个命令合集)
git checkout -b <branch>
基于远程分支创建分支
git checkout -b <new-branch> origin/<old-branch>
例如:git checkout -b dev origin/liang
八、git log(查看用户提交日志)
查看用户提交日志:git log --author=[username]
九、.git diff(对比版本差异)
对面两个版本(详情)git diff 418ecd9f9db1b2594dd788131599cabf49cd6723 5b4aa61f3330c10151d59d4ac50180b781ad8ae1
对面两个版本(概要)git diff —stat 418ecd9f9db1b2594dd788131599cabf49cd6723 5b4aa61f3330c10151d59d4ac50180b781ad8ae1
十、git commit之后,想撤销commit
写完代码后,我们一般这样
git add . //添加所有文件
git commit -m "本功能全部完成"
执行完commit后,想撤回commit,怎么办?
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
1、—mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交保持一致,工作区文件内容保持不变(撤销add)。
git reset [HEAD]
实例:
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
常用文件撤销:
git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的话 就是上一次add操作全部撤销了
git reset HEAD xxx/xxx/xxx.cpp 就是对某个文件进行撤销了
2、--soft 参数用于回退到某个版本
git reset --soft HEAD^ (回退到上一个版本,撤销commit,不撤销add):
实例:
$ git reset --soft HEAD~3 # 回退上上上一个版本
3、--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
(删除工作空间的改动代码,撤销commit且撤销add)
git reset --hard HEAD
实例:
$ git reset --hard HEAD~3 # 回退上上上一个版本
$ git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。
十一、git merge(分支合并)
1、git merge dev
是将dev的分支合并到当前分支,应该默认是fast forward模式
2、git merge dev --squash
是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit,然后完成最终的合并。
十二、 删除本地分支
git branch -d 分支号
git branch -D 分支号(强制删除)
十三、 格式化日志输出
git log --pretty=format:"%an:%ar:%s"
十四、撤回push
git revert 命令撤回已 push 的代码的步骤:
首先,确认你当前所在的分支。你可以使用 git branch 命令来查看当前分支,例如:
git branch
如果你想撤回最近一次的 push,可以使用 git revert 命令。它会创建一个新的提交来撤销之前的提交。使用以下命令:
git revert HEAD
如果你想要撤回多个提交,可以指定这些提交的 commit ID,例如:
git revert <commit-id1> <commit-id2> ...
执行 git revert 命令后,会弹出编辑器以供你编写提交信息。保存并关闭编辑器后,Git 会创建一个新的撤销提交。
最后,将撤销提交 push 到远程仓库:
git push origin <branch-name>
将 <branch-name> 替换为你要 push 的分支名称。
请注意,git revert 操作不会删除之前的提交记录,而是创建新的提交来撤销之前的更改。这样做的好处是保留了历史记录,同时也避免了对他人协作的干扰。
十五、要查看指定用户的commit记录,可以使用以下Git命令
查看所有commit记录
git log
git log --author="你的用户名"
查看指定文件commit记录
git log --author="你的用户名" -- <file_path>
查看更详细commit记录,比如每个commit的改动内容
git log --author="你的用户名" -p
查看最近几次commit记录
git log --author="你的用户名" -n 5
十五、git cherry-pick 命令的作用
git cherry-pick 命令的作用,就是将指定的提交(commit)应用于其他分支。
$ git cherry-pick <commitHash>
$ git cherry-pick feature
上面代码表示将 feature 分支的最近一次提交,转移到当前分支。
Cherry pick 支持一次转移多个提交。
$ git cherry-pick <HashA> <HashB>
上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。如果想要转移一系列的连续提交,可以使用下面的简便语法。
$ git cherry-pick A..B
上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。
如果要包含提交 A,可以使用下面的语法。
$ git cherry-pick A^..B
如果操作过程中发生代码冲突,Cherry pick 会停下来,让用户决定如何继续操作。
(1) --continue
用户解决代码冲突后,第一步将修改的文件重新加入暂存区( git add . ),第二步使用下面的命令,让 Cherry pick 过程继续执行。
$ git cherry-pick --continue
(2) --abort
发生代码冲突后,放弃合并,回到操作前的样子。
(3) --quit
发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。