(1)Git
blame 文件名
该命令会显示出该文件名的创建者,以及最后的提交和时间戳。
(2)git reflog
该命令显示的是head指针移动的信息。他是在本地的,而不是你仓库的一部分。不会包含在push和merge中。如果我使用git
log ,我得到的提交信息是我仓库的一部分。
(3)git stash
把你当前在工作区中的修改暂时保存起来。然后工作区恢复到上一次提交时的状态。你可以去进行其他的工作了。
git stash list
显示当前工作区中包含的stash。
git stash pop
恢复工作区的修改,同时删除标识符。
(4)cat ~/.gitconfig
查看当前git的用户名和邮箱;
(5)git取消工作区的修改(还未add,commit)
当我们在编写代码过程中,可能由于某种原因,我们想要回退到最初的修改之前,那么应该怎么做呢?有两种方法:
【第一种方法】
1.git status
显示哪些文件被修改了。
2.git checkout -- 文件名
放弃工作区的修改。(可以选择哪些文件要回退,哪些文件要保留修改)。
【第二种方法】
1.git reflog
查看每次提交的信息。
2.git reset --hard [commit版本值]
强制回退到上一次commit版本。(放弃项目中所有文件的修改,完全回退到上一个commit版本)。可以加[commit版本值],可以回退到任意版本。
不加[commit版本值],默认回退到上一个版本。
(6)git 取消工作区的修改(已经add,还未commit)
此时我们已经把一些修改add到了本地暂存区中了,但是发现这些修改是没有必要的。要进行回退。有两种方法:
【第一种方法】
1.git reset HEAD [文件名]
清空本地暂存区。后面可以加上文件名,也可以不加文件名。当指定文件名时,也就是从暂存区清空该文件的修改。当使用"git
reset HEAD",也就是清空所有文件的修改。相当于工作区修改了,但是还未add ,还未commit。
2.如果还想回滚到上一次commit,请参考(5)。
【第二种方法】
1.git reflog
显示每次提交的信息。
2.git reset --hard [commit版本值]
回退到任意次提交的版本。从这里可以看到,“git reset --hard
commit版本”这个命令在任何时候都是可以使用的,不管你把工作区或者暂存区如何修改,直接使用这个命令就可以回退到任何版本。很强大,也要小心。
(7)git rm 文件名
删除文件跟踪,并且删除该文件。
(8)git rm --cached 文件名
删除文件跟踪,但是不删除该文件。
(9)解决冲突
[plain] view plain copy print?在CODE上查看代码片派生到我的代码片 a123 <<<<<<< HEAD b789 ======= b45678910 >>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc c |
其中<<<<<<(7个<)和=======(7个=)之间是我修改的。=======和>>>>>>>之间是别人修改的。发现冲突,我们只需要修改冲突,重新走一遍提交流程就好了。
(10)不顺利的代码提交
你在git push 时可能会失败,可能是因为别人提交了新代码,而你的代码和别人的代码冲突了。你需要先git
pull,在本地修改冲突代码后,再add-->commit-->push流程。
(11)修改分支名称
可能由于某种原因,你想要修改一个分支的名称,当然除了master之外。
git branch -m 旧分支名 新分支名
(12)git clone -b 分支名 仓库名
比如:
git clone -b version1.4 Myrepo
由于项目版本的迭代,我们一般开发一个新版本的时候都会新建一个分支,团队成员都会从该新分支进行检出或克隆,就会使用该命令。
(13)冲突解决:冲突代码如下:
<<<<<<< HEAD
test in master
=======
test in dev
>>>>>>> dev
理解:
<<<<<<< :标记冲突的开始,后面跟的是当前分支中的内容(也可以理解为是你改动的代码)。
HEAD: 指向当前分支的提交。
======之后,>>>>>>>之前是要merge过来的另一条分支上的代码(也可以理解为是别人改动的代码)。
>>>>>>> :标记冲突的结束,后面的dev是别人分支的名字。
你只要根据需求修改冲突的代码,然后继续add ,commit ,push即可。最好是在Push之前首先pull,让冲突在本地进行解决。
(14)git clone 远程所有分支(这里有点麻烦,我准备细讲一下)。
git clone 仓库url :只能clone远程仓库的master分支,无法clone所有的分支。如果我们想要仓库中的所有分支,解决方案如下:
1. git clone 仓库url ;
2. git branch -a :查看所有分支 :
*master
remotes/origin/dev
remotes/origin/master
了解下:master[本地主分支]、origin/master[远程主分支]、origin/dev[远程开发分支]
clone下来的代码默认master和origin/master是关联的,也就是他们的代码保持同步。但是origin/dev分支在本地没有任何的关联。
可以看到远程仓库其实还有dev分支,但是本地没有该分支。
3. git checkout -b dev origin/dev :在本地新建dev分支,并checkout远程的dev分支(和远程的origin/dev分支关联),并切换到到dev分支上;
(15)git diff 提交版本哈希值:文件名 提交版本哈希值:文件名
比较不同提交版本中两个文件的差异, 版本哈希值可以通过git log命令来获取,文件名需要的是相对路径。
(16)git log 文件名
查看某个文件的修改记录,文件名需要的是相对路径。
(17)git show 提交版本哈希值
查看某一次提交的所有修改内容,哈希值可以通过git log来获取。
(18)git config --list
查看当前git中的用户名和密码。
(19)git config --global user.name "chenyufeng"
git config --global user.email "503434355@qq.com"
添加修改Git的用户名和密码,加上--global参数表示是全局设置。注意修改也可以用该命令。
(20)下图是Git的使用规范流程,是我从网上找的图,画得很清晰:
合理正确的流程:
本地要有一个分支A和远端的分支保持对应。
然后本地新开分支B开发,提交记录。
如果需要将代码推送到远端的话,就切换到A,首先在A分支上pull同步远端的代码。
然后将分支B上的开发代码merge到分支A上。
然后再往服务器端推送。
(21)新建分支:每次开发新功能,都应该新建一个单独的分支。
#获取主干最新代码
$ git checkout master
$ git pull
# 新建一个开发分支myfeature
$ git checkout -b myfeature
(22)与主干同步:分支的开发过程中,要经常与主干保持同步。
$ git fetch origin
$ git rebase origin/master |