Git常用命令和操作

来源:互联网 发布:家庭装修网络布线 编辑:程序博客网 时间:2024/04/29 09:36

1、设置忽略的文件

我们在开发过程中肯定有些文件是不想放在版本库上的,比如项目配置文件等。

设置忽略的文件的步骤如下:

1)在项目目录中创建.gitignore文件

2)将要忽略的文件名写入.gitignore

3)运行以下命令将改动加入版本库,而且由于要忽略的文件已经写入了.gitignore文件,所以用以下命令没有问题:

git add .

4)提交修改

caoxuezhu@CY6898 /d/work/tool/version control tool/git/HelloWorld2 (master)$ git commit -m "test file ignore"[master adb0aaa] test file ignore 1 file changed, 1 insertion(+) create mode 100644 .gitignorecaoxuezhu@CY6898 /d/work/tool/version control tool/git/HelloWorld2 (master)$ git push origin masterUsername for 'https://github.com': caoxuezhu@cyou-inc.comPassword for 'https://caoxuezhu@cyou-inc.com@github.com':Counting objects: 4, done.Delta compression using up to 4 threads.Compressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 360 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To https://github.com/caoxuezhu/HelloWorld2.git   79aa7e0..adb0aaa  master -> master

2、设置只有自己要忽略的文件

比如我们有一个文件叫file_my_exclude,这个文件只是在自己本地有,而且也不用传到服务器上,那么我们进行下面的操作就可以了:

1)编辑exclude文件:

caoxuezhu@CY6898 /d/work/tool/version control tool/git/HelloWorld2 (master)$ vim .git/info/exclude

2)将要忽略的文件名写入文件:

# git ls-files --others --exclude-from=.git/info/exclude# Lines that start with '#' are comments.# For a project mostly in C, the following would be a good set of# exclude patterns (uncomment them if you want to use them):# *.[oa]# *~file_my_exclude

3)经过以上步骤就可以了,我们可以再测试一下,现在再提交就显示没有要添加的文件了:

caoxuezhu@CY6898 /d/work/tool/version control tool/git/HelloWorld2 (master)$ git add .caoxuezhu@CY6898 /d/work/tool/version control tool/git/HelloWorld2 (master)$ git commit -m "test my exclude"# On branch masternothing to commit, working directory clean

3、增量提交

我要说明的是这个增量提交功能可能跟我们想象的不太一样,使用它其实和一次新的提交是差不多的,并不是不生成新的提交记录。具体操作如下:

1)比如我们在上一次提交中修改了file_4和file_3,但是忘了提交file_3了,那就可以用到增量提交:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git commit -C origin --amend[FireElement cdc6e70] modify file_4

这时会提示你上一次提交时的comment,这次提交还是使用上次的comment,这一步等于把忘记提交的所有文件全都提交了。

2)切换到主干并和分支合并,这时会出一个界面让你输入merge的comment。后面大家可以看到,git会把这次merge记录也做为一次提交:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git checkout masterSwitched to branch 'master'cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git merge FireElementMerge made by the 'recursive' strategy. file_3 | 1 + 1 file changed, 1 insertion(+)

3)将改动上传到服务器:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git push origin masterUsername for 'https://github.com': pire_cao@163.comPassword for 'https://pire_cao@163.com@github.com': Counting objects: 7, done.Delta compression using up to 2 threads.Compressing objects: 100% (3/3), done.Writing objects: 100% (4/4), 497 bytes | 0 bytes/s, done.Total 4 (delta 1), reused 0 (delta 0)To https://github.com/caoxuezhu/HelloWorld2.git   b246c7f..d951525  master -> master

4)我们会看到项目的提交记录里多了两次提交:


第一次提交记录是增量提交的结果,里两对file_4的修改是上次的提交,对file_3的修改是本次的增量提交


第二次提交记录是merge的记录


* 有一点需要注意的是不要增量提交之前提交过的文件,这样会造成冲突


4、回滚修改

说是回滚,但是这种回滚还是有痕迹的。它真实的意思是再生成一次提交,将之前的某次提交反向修改回来。

比如我们之前做过一次修改:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git logcommit 9b0df9edc4ba46fd705fb5b5b2265f192633cf27Author: Xuezhu Cao <pire_cao@163.com>Date:   Wed Jul 31 00:24:22 2013 +0800    test revertcommit 02b58b57dbeeb3f10079d5a72aad50871319addaAuthor: Xuezhu Cao <pire_cao@163.com>Date:   Tue Jul 30 19:08:29 2013 +0800    test reset 1commit 1906203b3da2f3a0d4c4e31d8ecc2ab49609c477Author: Xuezhu Cao <pire_cao@163.com>Date:   Tue Jul 30 19:00:40 2013 +0800    test reset

现在我想把commit 9b0df9edc4ba46fd705fb5b5b2265f192633cf27回滚掉,就用下面的命令:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git revert HEAD[FireElement 24cc3e0] Revert "test revert" 1 file changed, 1 deletion(-)

执行上面这个命令时,会让你输入这出revert提交的注释,用它默认生成的即可。

执行完这个命令后,我们会发现多了一次提交:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git logcommit 24cc3e0a19c0d6c452f26bf7bae1d6b0870e22ddAuthor: Xuezhu Cao <pire_cao@163.com>Date:   Wed Jul 31 00:27:32 2013 +0800    Revert "test revert"        This reverts commit 9b0df9edc4ba46fd705fb5b5b2265f192633cf27.commit 9b0df9edc4ba46fd705fb5b5b2265f192633cf27Author: Xuezhu Cao <pire_cao@163.com>Date:   Wed Jul 31 00:24:22 2013 +0800    test revertcommit 02b58b57dbeeb3f10079d5a72aad50871319addaAuthor: Xuezhu Cao <pire_cao@163.com>Date:   Tue Jul 30 19:08:29 2013 +0800    test reset 1

接下来我们切换到主干,并把分支代码合并到主干,然后提交到服务器上:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git checkout masterSwitched to branch 'master'cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git pull origin masterFrom https://github.com/caoxuezhu/HelloWorld2 * branch            master     -> FETCH_HEADAlready up-to-date.cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git merge FireElementUpdating 02b58b5..24cc3e0Fast-forwardcxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git push origin masterUsername for 'https://github.com': pire_cao@163.comPassword for 'https://pire_cao@163.com@github.com': Counting objects: 6, done.Delta compression using up to 2 threads.Compressing objects: 100% (3/3), done.Writing objects: 100% (4/4), 453 bytes | 0 bytes/s, done.Total 4 (delta 1), reused 0 (delta 0)To https://github.com/caoxuezhu/HelloWorld2.git   02b58b5..24cc3e0  master -> master

这时我们再登录到网站上查看提交记录,就会发现多了两条记录:


其中一条是对文件做的修改:


而另一条是回滚这次修改:


文件的最终结果也是没有这次修改:


5、撤销修改

撤销的概念和回滚不一样,它是取消一次 commit记录,当然可以加--soft和--hard等参数,默认是--mixed方式撤消

比如我对file_3和file_4都进行了修改且分两次进行了commit:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git add file_3cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git commit -m "mofidy file 3"[FireElement 8ecfb82] mofidy file 3 1 file changed, 1 insertion(+)cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git add file_4cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git commit -m "modify file 4"[FireElement 499b87b] modify file 4 1 file changed, 1 insertion(+)cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git logcommit 499b87b67d0ce711f3725e9a1586d17b6e4847d9Author: Xuezhu Cao <pire_cao@163.com>Date:   Wed Jul 31 01:07:04 2013 +0800    modify file 4commit 8ecfb825a701689de51910e6e9a64fa1865ffe40Author: Xuezhu Cao <pire_cao@163.com>Date:   Wed Jul 31 01:06:45 2013 +0800    mofidy file 3

然后我想撤消息对file_4的那次修改,就可以用下面的命令:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git reset HEAD~Unstaged changes after reset:Mfile_4cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git logcommit 8ecfb825a701689de51910e6e9a64fa1865ffe40Author: Xuezhu Cao <pire_cao@163.com>Date:   Wed Jul 31 01:06:45 2013 +0800    mofidy file 3

可以看到只剩下对file_3的那次修改了,不过这样也让修改过的file_4变为没有提交的状态。

当然你可以对file_4再做提交,或者是想要彻底放弃对file_4的修改,就可以用下面的命令(我还下倾向说恢复到与服务器相同的版本,当然你也可以恢复到其它版本):

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git checkout origin file_4

下面就可以将确定要修改的内容与主干合并并提交到服务器上了:

cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git checkout masterSwitched to branch 'master'cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git pull origin masterFrom https://github.com/caoxuezhu/HelloWorld2 * branch            master     -> FETCH_HEADAlready up-to-date.cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git merge FireElementUpdating 24cc3e0..8ecfb82Fast-forward file_3 | 1 + 1 file changed, 1 insertion(+)cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git push origin masterUsername for 'https://github.com': pire_cao@163.comPassword for 'https://pire_cao@163.com@github.com': Counting objects: 5, done.Delta compression using up to 2 threads.Compressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 284 bytes | 0 bytes/s, done.Total 3 (delta 1), reused 0 (delta 0)To https://github.com/caoxuezhu/HelloWorld2.git   24cc3e0..8ecfb82  master -> master

这时到网站上去看也发现只有一次提交:


并且只有file_3的内容发生了变化:


file_4的内容没有发生改变:


好因呀,明天接着写吧,而且这篇博文也比较长了,我应该再启动一篇新的了。

原创粉丝点击