Git学习札记——进阶

(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

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章